UNPKG

@routineless/nx-aws-cdk

Version:
115 lines 5.43 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.collectAllImports = exports.applyModifications = void 0; const tslib_1 = require("tslib"); const ast_types_1 = require("ast-types"); const fs_extra_1 = require("fs-extra"); const glob_1 = require("glob"); const path_1 = tslib_1.__importDefault(require("path")); const recast_1 = require("recast"); const trie_1 = require("../../../../utils/trie"); const modifications_1 = require("./modifications"); const reduceModifications = (file, path, modifications) => { return modifications.reduce((acc, modification) => { const result = modification(file, path); return { modified: acc.modified || result.modified, traverseChildren: acc.traverseChildren || result.traverseChildren, }; }, { modified: false, traverseChildren: false, }); }; const applyModifications = async (distDir, modifications, ignore = '**/node_modules/**') => { const globPattern = path_1.default.join(distDir, '**/*.{js,mjs,cjs}'); const writePromises = []; for await (const file of (0, glob_1.iterate)(globPattern, { ignore })) { const fileContent = await (0, fs_extra_1.readFile)(file, 'utf8'); const code = (0, recast_1.parse)(fileContent, { parser: require('recast/parsers/typescript') }); let modificationsHaveBeenMade = false; if ((0, modifications_1.isEsmModifications)(modifications)) { (0, recast_1.visit)(code, { visitImportDeclaration(path) { const modificationsResult = reduceModifications(file, path, modifications.importDeclaration); modificationsHaveBeenMade = modificationsHaveBeenMade || modificationsResult.modified; return modificationsResult.traverseChildren; }, visitExportAllDeclaration(path) { const modificationsResult = reduceModifications(file, path, modifications.exportAllDeclaration); modificationsHaveBeenMade = modificationsHaveBeenMade || modificationsResult.modified; return modificationsResult.traverseChildren; }, visitExportNamedDeclaration(path) { const modificationsResult = reduceModifications(file, path, modifications.exportNamedDeclaration); modificationsHaveBeenMade = modificationsHaveBeenMade || modificationsResult.modified; return modificationsResult.traverseChildren; }, }); } else { (0, recast_1.visit)(code, { visitCallExpression(path) { const modificationsResult = reduceModifications(file, path, modifications.callExpression); modificationsHaveBeenMade = modificationsHaveBeenMade || modificationsResult.modified; return modificationsResult.traverseChildren; }, }); } if (modificationsHaveBeenMade) { writePromises.push((0, fs_extra_1.writeFile)(file, (0, recast_1.print)(code).code)); } } return Promise.all(writePromises); }; exports.applyModifications = applyModifications; const collectAllImports = async (files, excluded = []) => { const allImports = new Map(); const excludedPatternTrie = new trie_1.PatternTrie(excluded); const addImport = (path) => { if (path.node.importKind === 'value' && path.node.source) { const importModule = path.node.source.value; if (excludedPatternTrie.has(importModule)) { return false; } let importsAggregate = allImports.get(importModule); if (!importsAggregate) { importsAggregate = { namespaceImport: false, defaultImport: false, sideEffectImport: false, namedImports: new Set(), }; allImports.set(importModule, importsAggregate); } const specifiers = path.node.specifiers || []; for (const specifier of specifiers) { if (ast_types_1.namedTypes.ImportSpecifier.check(specifier)) { const importedName = specifier.imported.name; importsAggregate.namedImports.add(importedName); } else if (ast_types_1.namedTypes.ImportDefaultSpecifier.check(specifier)) { importsAggregate.defaultImport = true; } else if (ast_types_1.namedTypes.ImportNamespaceSpecifier.check(specifier)) { importsAggregate.namespaceImport = true; } } if (specifiers.length === 0) { importsAggregate.sideEffectImport = true; } } return false; }; await Promise.all(files.map((file) => (0, fs_extra_1.readFile)(file, 'utf8').then((fileContent) => { const code = (0, recast_1.parse)(fileContent, { parser: require('recast/parsers/typescript') }); (0, recast_1.visit)(code, { visitImportDeclaration(path) { return addImport(path); }, }); }))); return allImports; }; exports.collectAllImports = collectAllImports; //# sourceMappingURL=util.js.map