{"version":3,"file":"babel_file.js","sourceRoot":"","sources":["../src/babel_file.ts"],"names":[],"mappings":"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","sourcesContent":["import * as path from 'path';\nimport babelTraverse from '@babel/traverse';\nimport {File as BabelNodes} from '@babel/types';\nimport * as babelParser from '@babel/parser';\nimport {ParseableFile} from './parsable_file';\nimport {PackageJSON} from './package_json';\n\nconst defaults = {readonly: true};\nexport class BabelFile extends ParseableFile {\n constructor(\n public props: ConstructorParameters[0] & {\n plugins?: babelParser.ParserPlugin[];\n // modifyDependency?: (dep: string) => string;\n pkg?: PackageJSON;\n } = defaults\n ) {\n super({...props, ...defaults});\n this.props = {...props, ...defaults};\n }\n get pkg() {\n return this.props.pkg ?? new PackageJSON({cwd: this.cwd});\n }\n /** @see https://stackoverflow.com/a/54003496/340688 */\n static getBuiltins() {\n try {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const result = require('module');\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n return result.builtinModules;\n } catch (e) {\n /* istanbul ignore next */\n // prettier-ignore\n return [\n 'assert', 'buffer', 'child_process',\n 'cluster', 'console', 'constants',\n 'crypto', 'dgram', 'dns',\n 'domain', 'events', 'fs',\n 'http', 'https', 'module',\n 'net', 'os', 'path',\n 'process', 'punycode', 'querystring',\n 'readline', 'repl', 'stream',\n 'string_decoder', 'sys', 'timers',\n 'tls', 'tty', 'url',\n 'util', 'vm', 'zlib'\n ];\n }\n }\n static builtins = BabelFile.getBuiltins();\n static isNativeImport(pkg: string) {\n return BabelFile.builtins.includes(pkg);\n }\n static isLocalImport(pkg: string) {\n return Boolean(pkg.match('^/|^./|^../'));\n }\n static isNodePackageImport(pkg: string) {\n return !BabelFile.isNativeImport(pkg) && !BabelFile.isLocalImport(pkg);\n }\n get packageImports() {\n return (async () => {\n return (await this.imports).filter(BabelFile.isNodePackageImport);\n })();\n }\n get localImports() {\n return (async () => {\n return (await this.imports).filter(BabelFile.isLocalImport);\n })();\n }\n get nativeImports() {\n return (async () => {\n return (await this.imports).filter(BabelFile.isNativeImport);\n })();\n }\n get packageRecursiveImports() {\n return (async () => {\n return (await this.recursiveImports).filter(BabelFile.isNodePackageImport);\n })();\n }\n get localRecursiveImports() {\n return (async () => {\n return (await this.recursiveImports).filter(BabelFile.isLocalImport);\n })();\n }\n get nativeRecursiveImports() {\n return (async () => {\n return (await this.recursiveImports).filter(BabelFile.isNativeImport);\n })();\n }\n get plugins(): babelParser.ParserPlugin[] {\n if (this.props.plugins && this.props.plugins.length) return this.props.plugins;\n return ['typescript', 'classProperties', 'classPrivateProperties'];\n }\n // get modifyDependency() {\n // return this.props?.modifyDependency;\n // }\n private cacheParsedContent?: BabelNodes;\n parse(content: string): BabelNodes {\n if (this.cacheParsedContent) return this.cacheParsedContent;\n this.cacheParsedContent = babelParser.parse(content, {\n sourceType: 'module',\n plugins: this.plugins,\n });\n return this.cacheParsedContent;\n }\n private cacheImports?: string[];\n get imports(): Promise {\n return (async () => {\n if (this.cacheImports) return this.cacheImports;\n let imports: string[] = [];\n const content = await this.parsedContent;\n babelTraverse(content, {\n CallExpression: astPath => {\n /* istanbul ignore next */\n if ('name' in astPath.node?.callee) {\n if (astPath.node?.callee?.name === 'require') {\n const arg = astPath.node.arguments[0];\n /* istanbul ignore next */\n if ('value' in arg && typeof arg.value === 'string') {\n imports.push(arg.value);\n // if (this.modifyDependency) arg.value = this.modifyDependency(arg.value);\n }\n }\n }\n },\n ImportDeclaration: astPath => {\n imports.push(astPath.node.source.value);\n // if (this.modifyDependency) {\n // astPath.node.source.value = this.modifyDependency(astPath.node.source.value);\n // }\n },\n });\n imports = imports.map(i => {\n if (BabelFile.isLocalImport(i)) {\n return path.join(this.dirname, `${i}${this.extname}`);\n }\n return i;\n });\n this.cacheImports = imports;\n return this.cacheImports;\n })();\n }\n static uniqueString(a: string[]) {\n function onlyUnique(value: string, index: number, self: string[]) {\n return self.indexOf(value) === index;\n }\n const unique = a.filter(onlyUnique); // returns ['a', 1, 2, '1']\n return unique;\n }\n private cacheSiblingFiles: {[key: string]: BabelFile} = {};\n private cacheRecursiveImports: string[] = [];\n private fileCacheCheck(path: string) {\n return typeof this.cacheSiblingFiles[path] !== 'undefined';\n }\n private fileCacheAdd(file: BabelFile) {\n this.cacheSiblingFiles[file.path] = file;\n }\n private async recursiveImportAdd(file: BabelFile) {\n const imports = await file.imports;\n this.cacheRecursiveImports = BabelFile.uniqueString([...this.cacheRecursiveImports, ...imports]);\n }\n get recursiveDependencies(): Promise<[string[], {[key: string]: BabelFile}]> {\n return (async (): Promise<[string[], {[key: string]: BabelFile}]> => {\n if (this.cacheRecursiveImports.length !== 0) {\n return [this.cacheRecursiveImports, this.cacheSiblingFiles];\n }\n const recursive = async (babelFile: BabelFile) => {\n await this.fileCacheAdd(babelFile);\n await this.recursiveImportAdd(babelFile);\n return (await babelFile.localImports).reduce((promise, path) => {\n return promise.then(async () => {\n const isCached = this.fileCacheCheck(path);\n if (isCached) return;\n const file = new BabelFile({path});\n this.fileCacheAdd(file);\n await recursive(file);\n });\n }, Promise.resolve());\n };\n await recursive(this);\n return [this.cacheRecursiveImports, this.cacheSiblingFiles];\n })();\n }\n get recursiveImports() {\n return (async () => {\n const [imports] = await this.recursiveDependencies;\n return imports;\n })();\n }\n get recursiveSiblings() {\n return (async () => {\n const [, siblings] = await this.recursiveDependencies;\n return Object.values(siblings);\n })();\n }\n /** Given a package json file, will pluck all npm dependencies */\n get dependencies(): Promise<{[k: string]: string}> {\n return (async () => {\n const imports = await this.packageRecursiveImports;\n const nativeImports = await this.nativeRecursiveImports;\n const allDependencies = await this.pkg.dependencies;\n const dependencies = {};\n imports.forEach(i => {\n const version = allDependencies[i];\n if (!version) throw new Error(`Dependency \"${i}\" is not found in package.json.`);\n Object.assign(dependencies, {[i]: version});\n });\n nativeImports.forEach(i => {\n const version = allDependencies[i];\n if (version) Object.assign(dependencies, {[i]: version});\n });\n return dependencies;\n })();\n }\n}\n"]}