Blame view
node_modules/eslint/lib/rules/no-restricted-imports.js
2.61 KB
f7563de62
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
/** * @fileoverview Restrict usage of specified node imports. * @author Guy Ellis */ "use strict"; //------------------------------------------------------------------------------ // Rule Definition //------------------------------------------------------------------------------ const ignore = require("ignore"); const arrayOfStrings = { type: "array", items: { type: "string" }, uniqueItems: true }; module.exports = { meta: { docs: { description: "disallow specified modules when loaded by `import`", category: "ECMAScript 6", recommended: false }, schema: { anyOf: [ arrayOfStrings, { type: "array", items: [{ type: "object", properties: { paths: arrayOfStrings, patterns: arrayOfStrings }, additionalProperties: false }], additionalItems: false } ] } }, create(context) { const options = Array.isArray(context.options) ? context.options : []; const isStringArray = typeof options[0] !== "object"; const restrictedPaths = new Set(isStringArray ? context.options : options[0].paths || []); const restrictedPatterns = isStringArray ? [] : options[0].patterns || []; // if no imports are restricted we don"t need to check if (restrictedPaths.size === 0 && restrictedPatterns.length === 0) { return {}; } const ig = ignore().add(restrictedPatterns); return { ImportDeclaration(node) { if (node && node.source && node.source.value) { const importName = node.source.value.trim(); if (restrictedPaths.has(importName)) { context.report({ node, message: "'{{importName}}' import is restricted from being used.", data: { importName } }); } if (restrictedPatterns.length > 0 && ig.ignores(importName)) { context.report({ node, message: "'{{importName}}' import is restricted from being used by a pattern.", data: { importName } }); } } } }; } }; |