UNPKG

restrict-imports-loader

Version:

A Webpack loader to restrict imports in ES and TypeScript

53 lines 2.17 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const typescript_1 = __importDefault(require("typescript")); async function checkAsync(x) { const sourceFile = typescript_1.default.createSourceFile(x.fileName, x.source, typescript_1.default.ScriptTarget.Latest, x.setParentNodes); const imports = importsIn(sourceFile); return Promise.all(x.deciders.map(decider => onlyRestricted(decider, imports))); } exports.checkAsync = checkAsync; async function onlyRestricted(decider, is) { const isAndDecisions = await Promise.all(is.map(i => decider(i.path).then(decision => ({ i, decision })))); const results = []; for (const iAndD of isAndDecisions) { if (iAndD.decision.restricted) { results.push({ ...iAndD.i, info: iAndD.decision.info }); } } return results; } function importsIn(rootNode) { const accumulator = []; const getLineNumber = ((node) => 1 + rootNode.getLineAndCharacterOfPosition(node.pos).line); typescript_1.default.forEachChild(rootNode, node => { if (isInteresting(node)) lookForImportsIn(node, accumulator, getLineNumber); }); return accumulator; } function lookForImportsIn(interestingNode, accumulator, getLineNumber) { interestingNode.forEachChild(node => { if (typescript_1.default.isStringLiteral(node) || typescript_1.default.isExternalModuleReference(node)) { const stringLiteral = (typescript_1.default.isExternalModuleReference(node) ? node.expression : node); accumulator.push({ path: stringLiteral.text, node: interestingNode, line: getLineNumber(stringLiteral), }); } }); } function isInteresting(node) { return [ typescript_1.default.isImportDeclaration, typescript_1.default.isExportDeclaration, typescript_1.default.isImportEqualsDeclaration, ].some(f => f(node)); } //# sourceMappingURL=core.js.map