@wyw-in-js/transform 0.1.1 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm/index.js +4 -1
- package/esm/index.js.map +1 -1
- package/esm/options/loadBabelOptions.js +1 -1
- package/esm/options/loadBabelOptions.js.map +1 -1
- package/esm/plugins/babel-transform.js +2 -2
- package/esm/plugins/babel-transform.js.map +1 -1
- package/esm/plugins/collector.js +4 -4
- package/esm/plugins/collector.js.map +1 -1
- package/esm/plugins/preeval.js +11 -11
- package/esm/plugins/preeval.js.map +1 -1
- package/esm/plugins/shaker.js +5 -5
- package/esm/plugins/shaker.js.map +1 -1
- package/esm/shaker.js +2 -2
- package/esm/shaker.js.map +1 -1
- package/esm/transform/Entrypoint.helpers.js +1 -2
- package/esm/transform/Entrypoint.helpers.js.map +1 -1
- package/esm/transform/Entrypoint.js +4 -4
- package/esm/transform/Entrypoint.js.map +1 -1
- package/esm/transform/generators/collect.js +3 -2
- package/esm/transform/generators/collect.js.map +1 -1
- package/esm/transform/generators/evalFile.js +6 -6
- package/esm/transform/generators/evalFile.js.map +1 -1
- package/esm/transform/generators/extract.js +18 -14
- package/esm/transform/generators/extract.js.map +1 -1
- package/esm/transform/generators/transform.js +2 -2
- package/esm/transform/generators/transform.js.map +1 -1
- package/esm/transform/generators/workflow.js +3 -3
- package/esm/transform/generators/workflow.js.map +1 -1
- package/esm/transform/helpers/{loadLinariaOptions.js → loadWywOptions.js} +5 -5
- package/esm/transform/helpers/loadWywOptions.js.map +1 -0
- package/esm/transform.js +11 -10
- package/esm/transform.js.map +1 -1
- package/esm/types.js.map +1 -1
- package/esm/utils/ShakerMetadata.js +1 -1
- package/esm/utils/ShakerMetadata.js.map +1 -1
- package/esm/utils/{addIdentifierToLinariaPreval.js → addIdentifierToWywPreval.js} +10 -10
- package/esm/utils/addIdentifierToWywPreval.js.map +1 -0
- package/esm/utils/collectExportsAndImports.js +141 -53
- package/esm/utils/collectExportsAndImports.js.map +1 -1
- package/esm/utils/collectTemplateDependencies.js +2 -2
- package/esm/utils/collectTemplateDependencies.js.map +1 -1
- package/esm/utils/getTagProcessor.js +1 -1
- package/esm/utils/getTagProcessor.js.map +1 -1
- package/esm/utils/hasWywPreval.js +7 -0
- package/esm/utils/hasWywPreval.js.map +1 -0
- package/lib/index.js +28 -4
- package/lib/index.js.map +1 -1
- package/lib/options/loadBabelOptions.js +1 -1
- package/lib/options/loadBabelOptions.js.map +1 -1
- package/lib/plugins/babel-transform.js +2 -2
- package/lib/plugins/babel-transform.js.map +1 -1
- package/lib/plugins/collector.js +4 -4
- package/lib/plugins/collector.js.map +1 -1
- package/lib/plugins/preeval.js +11 -11
- package/lib/plugins/preeval.js.map +1 -1
- package/lib/plugins/shaker.js +5 -5
- package/lib/plugins/shaker.js.map +1 -1
- package/lib/shaker.js +2 -2
- package/lib/shaker.js.map +1 -1
- package/lib/transform/Entrypoint.helpers.js +1 -2
- package/lib/transform/Entrypoint.helpers.js.map +1 -1
- package/lib/transform/Entrypoint.js +4 -4
- package/lib/transform/Entrypoint.js.map +1 -1
- package/lib/transform/generators/collect.js +1 -1
- package/lib/transform/generators/collect.js.map +1 -1
- package/lib/transform/generators/evalFile.js +6 -6
- package/lib/transform/generators/evalFile.js.map +1 -1
- package/lib/transform/generators/extract.js +18 -14
- package/lib/transform/generators/extract.js.map +1 -1
- package/lib/transform/generators/transform.js +2 -2
- package/lib/transform/generators/transform.js.map +1 -1
- package/lib/transform/generators/workflow.js +3 -3
- package/lib/transform/generators/workflow.js.map +1 -1
- package/lib/transform/helpers/{loadLinariaOptions.js → loadWywOptions.js} +6 -6
- package/lib/transform/helpers/loadWywOptions.js.map +1 -0
- package/lib/transform/helpers/withDefaultServices.js +2 -2
- package/lib/transform/helpers/withDefaultServices.js.map +1 -1
- package/lib/transform.js +11 -10
- package/lib/transform.js.map +1 -1
- package/lib/types.js.map +1 -1
- package/lib/utils/ShakerMetadata.js +1 -1
- package/lib/utils/ShakerMetadata.js.map +1 -1
- package/lib/utils/{addIdentifierToLinariaPreval.js → addIdentifierToWywPreval.js} +12 -12
- package/lib/utils/addIdentifierToWywPreval.js.map +1 -0
- package/lib/utils/collectExportsAndImports.js +141 -53
- package/lib/utils/collectExportsAndImports.js.map +1 -1
- package/lib/utils/collectTemplateDependencies.js +2 -2
- package/lib/utils/collectTemplateDependencies.js.map +1 -1
- package/lib/utils/getTagProcessor.js +2 -2
- package/lib/utils/getTagProcessor.js.map +1 -1
- package/lib/utils/hasWywPreval.js +13 -0
- package/lib/utils/hasWywPreval.js.map +1 -0
- package/lib/vm/createVmContext.js +2 -2
- package/lib/vm/createVmContext.js.map +1 -1
- package/package.json +24 -21
- package/types/index.d.ts +5 -2
- package/types/index.js +9 -3
- package/types/options/loadBabelOptions.js +1 -1
- package/types/plugins/babel-transform.js +2 -2
- package/types/plugins/collector.js +4 -4
- package/types/plugins/preeval.js +11 -11
- package/types/plugins/shaker.js +5 -5
- package/types/shaker.js +2 -2
- package/types/transform/Entrypoint.d.ts +1 -1
- package/types/transform/Entrypoint.helpers.js +3 -3
- package/types/transform/Entrypoint.js +4 -4
- package/types/transform/generators/collect.js +1 -1
- package/types/transform/generators/evalFile.js +7 -7
- package/types/transform/generators/extract.js +21 -12
- package/types/transform/generators/transform.js +2 -4
- package/types/transform/generators/workflow.js +3 -3
- package/types/transform/helpers/{loadLinariaOptions.d.ts → loadWywOptions.d.ts} +1 -1
- package/types/transform/helpers/{loadLinariaOptions.js → loadWywOptions.js} +19 -19
- package/types/transform.d.ts +7 -6
- package/types/transform.js +11 -10
- package/types/types.d.ts +1 -1
- package/types/utils/ShakerMetadata.d.ts +1 -1
- package/types/utils/ShakerMetadata.js +1 -1
- package/types/utils/addIdentifierToWywPreval.d.ts +4 -0
- package/types/utils/{addIdentifierToLinariaPreval.js → addIdentifierToWywPreval.js} +12 -12
- package/types/utils/collectExportsAndImports.js +157 -58
- package/types/utils/collectTemplateDependencies.d.ts +1 -1
- package/types/utils/collectTemplateDependencies.js +2 -2
- package/types/utils/getTagProcessor.js +2 -2
- package/types/utils/hasWywPreval.d.ts +4 -0
- package/types/utils/{hasLinariaPreval.js → hasWywPreval.js} +3 -3
- package/esm/transform/helpers/loadLinariaOptions.js.map +0 -1
- package/esm/utils/addIdentifierToLinariaPreval.js.map +0 -1
- package/esm/utils/findPackageJSON.js +0 -26
- package/esm/utils/findPackageJSON.js.map +0 -1
- package/esm/utils/hasLinariaPreval.js +0 -7
- package/esm/utils/hasLinariaPreval.js.map +0 -1
- package/lib/transform/helpers/loadLinariaOptions.js.map +0 -1
- package/lib/utils/addIdentifierToLinariaPreval.js.map +0 -1
- package/lib/utils/findPackageJSON.js +0 -35
- package/lib/utils/findPackageJSON.js.map +0 -1
- package/lib/utils/hasLinariaPreval.js +0 -13
- package/lib/utils/hasLinariaPreval.js.map +0 -1
- package/types/utils/addIdentifierToLinariaPreval.d.ts +0 -4
- package/types/utils/findPackageJSON.d.ts +0 -1
- package/types/utils/findPackageJSON.js +0 -56
- package/types/utils/hasLinariaPreval.d.ts +0 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collectExportsAndImports.js","names":["_shared","require","_getScope","_isExports","_isNotNull","_isRequire","_isTypedNode","_traversalCache","sideEffectImport","item","imported","exports","explicitImport","getValue","node","type","name","value","isType","p","importKind","exportKind","collectors","ImportSpecifier","path","source","get","local","ImportDefaultSpecifier","ImportNamespaceSpecifier","unfoldNamespaceImport","collectFromImportDeclaration","state","specifiers","length","imports","push","forEach","specifier","isImportSpecifier","collector","getAncestorsWhile","cond","result","current","parentPath","whatIsDestructed","objectPattern","destructedProps","traverse","Identifier","identifier","isBindingIdentifier","parent","isObjectProperty","chain","filter","isTypedNode","map","key","isIdentifier","isNotNull","reverse","what","as","isRestElement","argument","debug","logger","extend","importFromVariableDeclarator","isSync","id","isObjectPattern","findIIFE","isCallExpression","isFunctionExpression","exportFromVariableDeclarator","init","binding","getScope","getBinding","iife","referencePaths","constantViolations","find","isExpression","reduce","acc","destructed","collectFromDynamicImport","callExpression","sourcePath","isStringLiteral","container","isAwaited","isAwaitExpression","isVariableDeclarator","prop","getCalleeName","callee","isMemberExpression","property","undefined","getImportExportTypeByInteropFunction","startsWith","isAlreadyProcessed","collectFromRequire","isRequire","processedRequires","has","add","reexports","exported","variableDeclarator","unfolded","isExpressionStatement","collectFromVariableDeclarator","found","identifierPath","skip","isChainOfVoidAssignment","right","isUnaryExpression","operator","isAssignmentExpression","getReturnValue","params","body","_body$get","returnStatement","isReturnStatement","getGetterValueFromDescriptor","descriptor","props","getter","isArrowFunctionExpression","valueProp","valueValue","addExport","getRelatedImport","object","objectBinding","scope","i","some","isAncestor","computed","import","relatedImport","collectFromExports","isExports","memberExpression","exportName","saveRef","exportRefs","set","assignmentExpression","left","isEsModule","matchesPattern","obj","isObjectExpression","collectFromRequireOrExports","importItem","referenced","referencePath","_binding$referencePat","ancestor","isTSType","isFlowType","listKey","importType","isExportSpecifier","isExportDefaultDeclaration","collectFromExportAllDeclaration","_path$get","collectFromExportSpecifier","isExportDefaultSpecifier","isExportNamespaceSpecifier","collectFromExportNamedDeclaration","_path$get2","declaration","isVariableDeclaration","declarator","isTSEnumDeclaration","isFunctionDeclaration","isClassDeclaration","collectFromExportDefaultDeclaration","default","collectFromAssignmentExpression","_right$get","collectFromExportStarCall","_requireCall$get","requireCall","collectFromMap","properties","isFunction","returnValue","collectFromEsbuildExportCall","sourceExports","collectFromEsbuildReExportCall","_requireCall$get2","collectFromSwcExportCall","collectFromCallExpression","maybeExportStart","collectExportsAndImports","cacheMode","localState","deadExports","Map","sourceType","WeakSet","cache","getTraversalCache","_cache$get","AssignmentExpression","CallExpression","ExportAllDeclaration","ExportDefaultDeclaration","ExportNamedDeclaration","ImportDeclaration","Import","VariableDeclarator"],"sources":["../../src/utils/collectExportsAndImports.ts"],"sourcesContent":["/* eslint @typescript-eslint/no-use-before-define: [\"error\", { \"functions\": false }] */\n/* eslint-disable no-restricted-syntax,no-continue */\n\nimport type { NodePath } from '@babel/traverse';\nimport type {\n AssignmentExpression,\n BlockStatement,\n CallExpression,\n ExportAllDeclaration,\n ExportDefaultDeclaration,\n ExportDefaultSpecifier,\n ExportNamedDeclaration,\n ExportNamespaceSpecifier,\n ExportSpecifier,\n Expression,\n Function as FunctionNode,\n Identifier,\n Import,\n ImportDeclaration,\n ImportDefaultSpecifier,\n ImportNamespaceSpecifier,\n ImportSpecifier,\n MemberExpression,\n ObjectExpression,\n ObjectPattern,\n Program,\n StringLiteral,\n VariableDeclarator,\n} from '@babel/types';\n\nimport { logger } from '@wyw-in-js/shared';\n\nimport { getScope } from './getScope';\nimport { isExports } from './isExports';\nimport { isNotNull } from './isNotNull';\nimport { isRequire } from './isRequire';\nimport { isTypedNode } from './isTypedNode';\nimport { getTraversalCache } from './traversalCache';\n\nexport interface ISideEffectImport {\n imported: 'side-effect';\n local: NodePath;\n source: string;\n}\n\nexport interface IImport {\n imported: string | 'default' | '*';\n local: NodePath<Identifier | MemberExpression>;\n source: string;\n type: 'cjs' | 'dynamic' | 'esm';\n}\n\nexport type Exports = Record<string | 'default' | '*', NodePath>; // '*' means re-export all\n\nexport interface IReexport {\n exported: string | 'default' | '*';\n imported: string | 'default' | '*';\n local: NodePath;\n source: string;\n}\n\nexport interface IState {\n deadExports: string[];\n exportRefs: Map<string, NodePath<MemberExpression>[]>;\n exports: Exports;\n imports: (IImport | ISideEffectImport)[];\n isEsModule: boolean;\n reexports: IReexport[];\n}\n\ninterface ILocalState extends IState {\n processedRequires: WeakSet<NodePath>;\n}\n\nexport const sideEffectImport = (\n item: IImport | ISideEffectImport\n): item is ISideEffectImport => item.imported === 'side-effect';\n\nexport const explicitImport = (\n item: IImport | ISideEffectImport\n): item is IImport => item.imported !== 'side-effect';\n\nfunction getValue({ node }: { node: Identifier | StringLiteral }): string {\n return node.type === 'Identifier' ? node.name : node.value;\n}\n\n// We ignore imports and exports of types\nconst isType = (p: {\n node: { importKind?: 'type' | unknown } | { exportKind?: 'type' | unknown };\n}): boolean =>\n ('importKind' in p.node && p.node.importKind === 'type') ||\n ('exportKind' in p.node && p.node.exportKind === 'type');\n\n// Force TypeScript to check, that we have implementation for every possible specifier\ntype SpecifierTypes = ImportDeclaration['specifiers'][number];\nconst collectors: {\n [K in SpecifierTypes['type']]: (\n path: NodePath<SpecifierTypes & { type: K }>,\n source: string\n ) => IImport[];\n} = {\n ImportSpecifier(path: NodePath<ImportSpecifier>, source): IImport[] {\n if (isType(path)) return [];\n const imported = getValue(path.get('imported'));\n const local = path.get('local');\n return [{ imported, local, source, type: 'esm' }];\n },\n\n ImportDefaultSpecifier(\n path: NodePath<ImportDefaultSpecifier>,\n source\n ): IImport[] {\n const local = path.get('local');\n return [{ imported: 'default', local, source, type: 'esm' }];\n },\n\n ImportNamespaceSpecifier(\n path: NodePath<ImportNamespaceSpecifier>,\n source\n ): IImport[] {\n const local = path.get('local');\n return unfoldNamespaceImport({ imported: '*', local, source, type: 'esm' });\n },\n};\n\nfunction collectFromImportDeclaration(\n path: NodePath<ImportDeclaration>,\n state: ILocalState\n): void {\n // If importKind is specified, and it's not a value, ignore that import\n if (isType(path)) return;\n\n const source = getValue(path.get('source'));\n const specifiers = path.get('specifiers');\n\n if (specifiers.length === 0) {\n state.imports.push({ imported: 'side-effect', local: path, source });\n }\n\n specifiers.forEach(<T extends SpecifierTypes>(specifier: NodePath<T>) => {\n if (specifier.isImportSpecifier() && isType(specifier)) return;\n\n const collector = collectors[\n specifier.node.type\n ] as (typeof collectors)[T['type']];\n\n state.imports.push(...collector(specifier, source));\n });\n}\n\ninterface IDestructed {\n as: NodePath<Identifier>;\n what: string | '*';\n}\n\nfunction getAncestorsWhile(path: NodePath, cond: (p: NodePath) => boolean) {\n const result: NodePath[] = [];\n let current: NodePath | null = path;\n while (current && cond(current)) {\n result.push(current);\n current = current.parentPath;\n }\n\n return result;\n}\n\nfunction whatIsDestructed(\n objectPattern: NodePath<ObjectPattern>\n): IDestructed[] {\n const destructedProps: IDestructed[] = [];\n objectPattern.traverse({\n Identifier(identifier) {\n if (identifier.isBindingIdentifier()) {\n const parent = identifier.parentPath;\n if (parent.isObjectProperty({ value: identifier.node })) {\n const chain = getAncestorsWhile(parent, (p) => p !== objectPattern)\n .filter(isTypedNode('ObjectProperty'))\n .map((p) => {\n const key = p.get('key');\n if (!key.isIdentifier()) {\n // TODO: try to process other type of keys or at least warn about this\n return null;\n }\n\n return key;\n })\n .filter(isNotNull);\n chain.reverse();\n\n if (chain.length > 0) {\n destructedProps.push({\n what: chain[0].node.name,\n as: identifier,\n });\n }\n\n return;\n }\n\n if (parent.isRestElement({ argument: identifier.node })) {\n destructedProps.push({\n what: '*',\n as: identifier,\n });\n }\n }\n },\n });\n\n return destructedProps;\n}\n\nconst debug = logger.extend('evaluator:collectExportsAndImports');\n\nfunction importFromVariableDeclarator(\n path: NodePath<VariableDeclarator>,\n isSync: boolean\n): IDestructed[] {\n const id = path.get('id');\n if (id.isIdentifier()) {\n // It's the simplest case when the full namespace is imported\n return [\n {\n as: id,\n what: '*',\n },\n ];\n }\n\n if (!isSync) {\n // Something went wrong\n // Is it something like `const { … } = import(…)`?\n debug('`import` should be awaited');\n return [];\n }\n\n if (id.isObjectPattern()) {\n return whatIsDestructed(id);\n }\n\n // What else it can be?\n debug('importFromVariableDeclarator: unknown type of id %o', id.node.type);\n\n return [];\n}\n\nconst findIIFE = (path: NodePath): NodePath<CallExpression> | null => {\n if (path.isCallExpression() && path.get('callee').isFunctionExpression()) {\n return path;\n }\n\n if (!path.parentPath) {\n return null;\n }\n\n return findIIFE(path.parentPath);\n};\n\nfunction exportFromVariableDeclarator(\n path: NodePath<VariableDeclarator>\n): Exports {\n const id = path.get('id');\n const init = path.get('init');\n\n // If there is no init and id is an identifier, we should find IIFE\n if (!init.node && id.isIdentifier()) {\n const binding = getScope(path).getBinding(id.node.name);\n if (!binding) {\n return {};\n }\n\n const iife = [\n ...binding.referencePaths,\n ...binding.constantViolations,\n binding.path,\n ]\n .map(findIIFE)\n .find(isNotNull);\n\n if (!iife) {\n return {};\n }\n\n return {\n [id.node.name]: iife,\n };\n }\n\n if (!init || !init.isExpression()) {\n return {};\n }\n\n if (id.isIdentifier()) {\n // It is `export const a = 1;`\n return {\n [id.node.name]: init,\n };\n }\n\n if (id.isObjectPattern()) {\n // It is `export const { a, ...rest } = obj;`\n return whatIsDestructed(id).reduce<Exports>(\n (acc, destructed) => ({\n ...acc,\n [destructed.as.node.name]: init,\n }),\n {}\n );\n }\n\n // What else it can be?\n debug('exportFromVariableDeclarator: unknown type of id %o', id.node.type);\n\n return {};\n}\n\nfunction collectFromDynamicImport(\n path: NodePath<Import>,\n state: ILocalState\n): void {\n const { parentPath: callExpression } = path;\n if (!callExpression.isCallExpression()) {\n // It's wrong `import`\n return;\n }\n\n const [sourcePath] = callExpression.get('arguments');\n if (!sourcePath || !sourcePath.isStringLiteral()) {\n // Import should have at least one argument, and it should be StringLiteral\n return;\n }\n\n const source = sourcePath.node.value;\n\n let { parentPath: container, key } = callExpression;\n let isAwaited = false;\n\n if (container.isAwaitExpression()) {\n // If it's not awaited import, it imports the full namespace\n isAwaited = true;\n key = container.key;\n container = container.parentPath!;\n }\n\n // Is it `const something = await import(\"something\")`?\n if (key === 'init' && container.isVariableDeclarator()) {\n importFromVariableDeclarator(container, isAwaited).map((prop) =>\n state.imports.push({\n imported: prop.what,\n local: prop.as,\n source,\n type: 'dynamic',\n })\n );\n }\n}\n\nfunction getCalleeName(path: NodePath<CallExpression>): string | undefined {\n const callee = path.get('callee');\n if (callee.isIdentifier()) {\n return callee.node.name;\n }\n\n if (callee.isMemberExpression()) {\n const property = callee.get('property');\n if (property.isIdentifier()) {\n return property.node.name;\n }\n }\n\n return undefined;\n}\n\nfunction getImportExportTypeByInteropFunction(\n path: NodePath<CallExpression>\n): 'import:*' | 're-export:*' | 'default' | undefined {\n const name = getCalleeName(path);\n\n if (name === undefined) {\n return undefined;\n }\n\n if (name.startsWith('__exportStar')) {\n return 're-export:*';\n }\n\n if (\n name.startsWith('_interopRequireDefault') ||\n name.startsWith('__importDefault')\n ) {\n return 'default';\n }\n\n if (\n name.startsWith('_interopRequireWildcard') ||\n name.startsWith('__importStar') ||\n name.startsWith('__toESM')\n ) {\n return 'import:*';\n }\n\n if (\n name.startsWith('__rest') ||\n name.startsWith('__objRest') ||\n name.startsWith('_objectDestructuringEmpty')\n ) {\n return 'import:*';\n }\n\n return undefined;\n}\n\nfunction isAlreadyProcessed(path: NodePath): boolean {\n if (\n path.isCallExpression() &&\n path.get('callee').isIdentifier({ name: '__toCommonJS' })\n ) {\n // because its esbuild and we already processed all exports\n return true;\n }\n\n return false;\n}\n\nfunction collectFromRequire(\n path: NodePath<Identifier>,\n state: ILocalState\n): void {\n if (!isRequire(path)) return;\n\n // This method can be reached many times from multiple visitors for the same path\n // So we need to check if we already processed it\n if (state.processedRequires.has(path)) return;\n state.processedRequires.add(path);\n\n const { parentPath: callExpression } = path;\n if (!callExpression.isCallExpression()) {\n // It's wrong `require`\n return;\n }\n\n const [sourcePath] = callExpression.get('arguments');\n if (!sourcePath || !sourcePath.isStringLiteral()) {\n // Import should have at least one argument, and it should be StringLiteral\n return;\n }\n\n const source = sourcePath.node.value;\n\n const { parentPath: container, key } = callExpression;\n\n if (container.isCallExpression() && key === 0) {\n // It may be transpiled import such as\n // `var _atomic = _interopRequireDefault(require(\"@linaria/atomic\"));`\n const imported = getImportExportTypeByInteropFunction(container);\n if (!imported) {\n // It's not a transpiled import.\n // TODO: Can we guess that it's a namespace import?\n debug('Unknown wrapper of require: %o', container.node.callee);\n return;\n }\n\n if (imported === 're-export:*') {\n state.reexports.push({\n exported: '*',\n imported: '*',\n local: path,\n source,\n });\n\n return;\n }\n\n let { parentPath: variableDeclarator } = container;\n if (variableDeclarator.isCallExpression()) {\n if (variableDeclarator.get('callee').isIdentifier({ name: '_extends' })) {\n variableDeclarator = variableDeclarator.parentPath!;\n }\n }\n\n if (!variableDeclarator.isVariableDeclarator()) {\n // TODO: Where else it can be?\n debug('Unexpected require inside %o', variableDeclarator.node.type);\n return;\n }\n\n const id = variableDeclarator.get('id');\n if (!id.isIdentifier()) {\n debug('Id should be Identifier %o', variableDeclarator.node.type);\n return;\n }\n\n if (imported === 'import:*') {\n const unfolded = unfoldNamespaceImport({\n imported: '*',\n local: id,\n source,\n type: 'cjs',\n });\n state.imports.push(...unfolded);\n } else {\n state.imports.push({\n imported,\n local: id,\n source,\n type: 'cjs',\n });\n }\n }\n\n if (container.isMemberExpression()) {\n // It is `require('@linaria/shaker').dep`\n const property = container.get('property');\n if (!property.isIdentifier() && !property.isStringLiteral()) {\n debug(\n 'Property should be Identifier or StringLiteral %s',\n property.node.type\n );\n\n return;\n }\n\n const { parentPath: variableDeclarator } = container;\n\n if (variableDeclarator.isVariableDeclarator()) {\n // It is `const … = require('@linaria/shaker').dep`;\n const id = variableDeclarator.get('id');\n if (id.isIdentifier()) {\n state.imports.push({\n imported: getValue(property),\n local: id,\n source,\n type: 'cjs',\n });\n } else {\n debug('Id should be Identifier %o', variableDeclarator.node.type);\n }\n } else {\n // Maybe require is passed as an argument to some function?\n // Just use the whole MemberExpression as a local\n state.imports.push({\n imported: getValue(property),\n local: container,\n source,\n type: 'cjs',\n });\n }\n\n return;\n }\n\n // Is it `const something = require(\"something\")`?\n if (key === 'init' && container.isVariableDeclarator()) {\n importFromVariableDeclarator(container, true).forEach((prop) => {\n if (prop.what === '*') {\n const unfolded = unfoldNamespaceImport({\n imported: '*',\n local: prop.as,\n source,\n type: 'cjs',\n });\n\n state.imports.push(...unfolded);\n } else {\n state.imports.push({\n imported: prop.what,\n local: prop.as,\n source,\n type: 'cjs',\n });\n }\n });\n }\n\n if (container.isExpressionStatement()) {\n // Looks like standalone require\n state.imports.push({\n imported: 'side-effect',\n local: container,\n source,\n });\n }\n}\n\nfunction collectFromVariableDeclarator(\n path: NodePath<VariableDeclarator>,\n state: ILocalState\n): void {\n let found = false;\n path.traverse({\n Identifier(identifierPath) {\n if (isRequire(identifierPath)) {\n collectFromRequire(identifierPath, state);\n found = true;\n }\n },\n });\n\n if (found) {\n path.skip();\n }\n}\n\nfunction isChainOfVoidAssignment(\n path: NodePath<AssignmentExpression>\n): boolean {\n const right = path.get('right');\n if (right.isUnaryExpression({ operator: 'void' })) {\n return true;\n }\n\n if (right.isAssignmentExpression()) {\n return isChainOfVoidAssignment(right);\n }\n\n return false;\n}\n\nfunction getReturnValue(\n path: NodePath<FunctionNode>\n): NodePath<Expression> | undefined {\n if (path.node.params.length !== 0) return undefined;\n\n const body = path.get('body') as\n | NodePath<BlockStatement>\n | NodePath<Expression>;\n if (body.isExpression()) {\n return body;\n }\n\n if (body.node.body.length === 1) {\n const returnStatement = body.get('body')?.[0];\n if (!returnStatement.isReturnStatement()) return undefined;\n const argument = returnStatement.get('argument');\n if (!argument.isExpression()) return undefined;\n return argument;\n }\n\n return undefined;\n}\n\nfunction getGetterValueFromDescriptor(\n descriptor: NodePath<ObjectExpression>\n): NodePath<Expression> | undefined {\n const props = descriptor\n .get('properties')\n .filter(isTypedNode('ObjectProperty'));\n\n const getter = props.find((p) => p.get('key').isIdentifier({ name: 'get' }));\n const value = getter?.get('value');\n\n if (value?.isFunctionExpression() || value?.isArrowFunctionExpression()) {\n return getReturnValue(value);\n }\n\n const valueProp = props.find((p) =>\n p.get('key').isIdentifier({ name: 'value' })\n );\n\n const valueValue = valueProp?.get('value');\n\n return valueValue?.isExpression() ? valueValue : undefined;\n}\n\nfunction addExport(path: NodePath, exported: string, state: ILocalState): void {\n function getRelatedImport() {\n if (path.isMemberExpression()) {\n const object = path.get('object');\n if (!object.isIdentifier()) {\n return undefined;\n }\n\n const objectBinding = object.scope.getBinding(object.node.name);\n if (!objectBinding) {\n return undefined;\n }\n\n if (objectBinding.path.isVariableDeclarator()) {\n collectFromVariableDeclarator(objectBinding.path, state);\n }\n\n const found = state.imports.find(\n (i) =>\n objectBinding.identifier === i.local.node ||\n objectBinding.referencePaths.some((p) => i.local.isAncestor(p))\n );\n\n if (!found) {\n return undefined;\n }\n\n const property = path.get('property');\n let what = '*';\n if (path.node.computed && property.isStringLiteral()) {\n what = property.node.value;\n } else if (!path.node.computed && property.isIdentifier()) {\n what = property.node.name;\n }\n\n return {\n import: { ...found, local: path },\n what,\n };\n }\n\n return undefined;\n }\n\n const relatedImport = getRelatedImport();\n if (relatedImport) {\n // eslint-disable-next-line no-param-reassign\n state.reexports.push({\n local: relatedImport.import.local,\n imported: relatedImport.import.imported,\n source: relatedImport.import.source,\n exported,\n });\n } else {\n // eslint-disable-next-line no-param-reassign\n state.exports[exported] = path;\n }\n}\n\nfunction collectFromExports(\n path: NodePath<Identifier>,\n state: ILocalState\n): void {\n if (!isExports(path)) return;\n\n if (path.parentPath.isMemberExpression({ object: path.node })) {\n // It is `exports.prop = …`\n const memberExpression = path.parentPath;\n const property = memberExpression.get('property');\n if (!property.isIdentifier() || memberExpression.node.computed) {\n return;\n }\n\n const exportName = property.node.name;\n\n const saveRef = () => {\n // Save all export.____ usages for later\n if (!state.exportRefs.has(exportName)) {\n state.exportRefs.set(exportName, []);\n }\n\n state.exportRefs.get(exportName)!.push(memberExpression);\n };\n\n const assignmentExpression = memberExpression.parentPath;\n\n if (\n !assignmentExpression.isAssignmentExpression({\n left: memberExpression.node,\n })\n ) {\n // If it's not `exports.prop = …`. Just save it.\n saveRef();\n return;\n }\n\n const right = assignmentExpression.get('right');\n\n if (isChainOfVoidAssignment(assignmentExpression)) {\n // It is `exports.foo = void 0`\n return;\n }\n\n const { name } = property.node;\n if (name === '__esModule') {\n // eslint-disable-next-line no-param-reassign\n state.isEsModule = true;\n return;\n }\n\n saveRef();\n // eslint-disable-next-line no-param-reassign\n state.exports[property.node.name] = right;\n\n return;\n }\n\n if (\n path.parentPath.isCallExpression() &&\n path.parentPath.get('callee').matchesPattern('Object.defineProperty')\n ) {\n const [obj, prop, descriptor] = path.parentPath.get('arguments');\n if (\n obj?.isIdentifier(path.node) &&\n prop?.isStringLiteral() &&\n descriptor?.isObjectExpression()\n ) {\n if (prop.node.value === '__esModule') {\n // eslint-disable-next-line no-param-reassign\n state.isEsModule = true;\n } else {\n /**\n * Object.defineProperty(exports, \"token\", {\n * enumerable: true,\n * get: function get() {\n * return _unknownPackage.token;\n * }\n * });\n */\n const exported = prop.node.value;\n const local = getGetterValueFromDescriptor(descriptor);\n if (local) {\n addExport(local, exported, state);\n }\n }\n } else if (\n obj?.isIdentifier(path.node) &&\n prop?.isIdentifier() &&\n descriptor?.isObjectExpression()\n ) {\n /**\n * Object.defineProperty(exports, key, {\n * enumerable: true,\n * get: function get() {\n * return _unknownPackage[key];\n * }\n * });\n */\n const local = getGetterValueFromDescriptor(descriptor);\n if (local) {\n addExport(local, '*', state);\n }\n }\n }\n}\n\nfunction collectFromRequireOrExports(\n path: NodePath<Identifier>,\n state: ILocalState\n): void {\n if (isRequire(path)) {\n collectFromRequire(path, state);\n } else if (isExports(path)) {\n collectFromExports(path, state);\n }\n}\n\nfunction unfoldNamespaceImport(\n importItem: IImport & { imported: '*' }\n): IImport[] {\n const result: IImport[] = [];\n const { local } = importItem;\n if (!local.isIdentifier()) {\n // TODO: handle it\n return [importItem];\n }\n\n const binding = getScope(local).getBinding(local.node.name);\n if (!binding?.referenced) {\n // Imported namespace is not referenced and probably not used,\n // but it can have side effects, so we should keep it as is\n return [importItem];\n }\n\n for (const referencePath of binding?.referencePaths ?? []) {\n if (\n referencePath.find(\n (ancestor) => ancestor.isTSType() || ancestor.isFlowType()\n )\n ) {\n continue;\n }\n\n const { parentPath } = referencePath;\n if (parentPath?.isMemberExpression() && referencePath.key === 'object') {\n const property = parentPath.get('property');\n const object = parentPath.get('object');\n let imported: string | null;\n if (parentPath.node.computed && property.isStringLiteral()) {\n imported = property.node.value;\n } else if (!parentPath.node.computed && property.isIdentifier()) {\n imported = property.node.name;\n } else {\n imported = null;\n }\n\n if (object.isIdentifier() && imported) {\n result.push({\n ...importItem,\n imported,\n local: parentPath,\n });\n } else {\n result.push(importItem);\n break;\n }\n\n continue;\n }\n\n if (parentPath?.isVariableDeclarator() && referencePath.key === 'init') {\n importFromVariableDeclarator(parentPath, true).map((prop) =>\n result.push({ ...importItem, imported: prop.what, local: prop.as })\n );\n\n continue;\n }\n\n if (\n parentPath?.isCallExpression() &&\n referencePath.listKey === 'arguments'\n ) {\n // The defined variable is used as a function argument. Let's try to figure out what is imported.\n const importType = getImportExportTypeByInteropFunction(parentPath);\n\n if (!importType) {\n // Imported value is used as an unknown function argument,\n // so we can't predict usage and import it as is.\n result.push(importItem);\n break;\n }\n\n if (importType === 'default') {\n result.push({\n ...importItem,\n imported: 'default',\n local: parentPath.get('id') as NodePath<Identifier>,\n });\n\n continue;\n }\n\n if (importType === 'import:*') {\n result.push(importItem);\n break;\n }\n\n debug('unfoldNamespaceImports: unknown import type %o', importType);\n\n result.push(importItem);\n continue;\n }\n\n if (\n parentPath?.isExportSpecifier() ||\n parentPath?.isExportDefaultDeclaration()\n ) {\n // The whole namespace is re-exported\n result.push(importItem);\n break;\n }\n\n // Otherwise, we can't predict usage and import it as is\n // TODO: handle more cases\n debug(\n 'unfoldNamespaceImports: unknown reference %o',\n referencePath.node.type\n );\n result.push(importItem);\n break;\n }\n\n return result;\n}\n\nfunction collectFromExportAllDeclaration(\n path: NodePath<ExportAllDeclaration>,\n state: ILocalState\n): void {\n if (isType(path)) return;\n const source = path.get('source')?.node?.value;\n if (!source) return;\n\n // It is `export * from './css';`\n state.reexports.push({\n exported: '*',\n imported: '*',\n local: path,\n source,\n });\n}\n\nfunction collectFromExportSpecifier(\n path: NodePath<\n ExportSpecifier | ExportDefaultSpecifier | ExportNamespaceSpecifier\n >,\n source: string | undefined,\n state: ILocalState\n): void {\n if (path.isExportSpecifier()) {\n const exported = getValue(path.get('exported'));\n if (source) {\n // It is `export { foo } from './css';`\n const imported = path.get('local').node.name;\n state.reexports.push({\n exported,\n imported,\n local: path,\n source,\n });\n } else {\n const local = path.get('local');\n // eslint-disable-next-line no-param-reassign\n state.exports[exported] = local;\n }\n\n return;\n }\n\n if (path.isExportDefaultSpecifier() && source) {\n // It is `export default from './css';`\n state.reexports.push({\n exported: 'default',\n imported: 'default',\n local: path,\n source,\n });\n }\n\n if (path.isExportNamespaceSpecifier() && source) {\n const exported = path.get('exported').node.name;\n // It is `export * as foo from './css';`\n state.reexports.push({\n exported,\n imported: '*',\n local: path,\n source,\n });\n }\n\n // TODO: handle other cases\n debug(\n 'collectFromExportSpecifier: unprocessed ExportSpecifier %o',\n path.node.type\n );\n}\n\nfunction collectFromExportNamedDeclaration(\n path: NodePath<ExportNamedDeclaration>,\n state: ILocalState\n): void {\n if (isType(path)) return;\n\n const source = path.get('source')?.node?.value;\n const specifiers = path.get('specifiers');\n if (specifiers) {\n specifiers.forEach((specifier) =>\n collectFromExportSpecifier(specifier, source, state)\n );\n }\n\n const declaration = path.get('declaration');\n if (declaration.isVariableDeclaration()) {\n declaration.get('declarations').forEach((declarator) => {\n // eslint-disable-next-line no-param-reassign\n state.exports = {\n ...state.exports,\n ...exportFromVariableDeclarator(declarator),\n };\n });\n }\n\n if (declaration.isTSEnumDeclaration()) {\n // eslint-disable-next-line no-param-reassign\n state.exports[declaration.get('id').node.name] = declaration;\n }\n\n if (declaration.isFunctionDeclaration()) {\n const id = declaration.get('id');\n if (id.isIdentifier()) {\n // eslint-disable-next-line no-param-reassign\n state.exports[id.node.name] = id;\n }\n }\n\n if (declaration.isClassDeclaration()) {\n const id = declaration.get('id');\n if (id.isIdentifier()) {\n // eslint-disable-next-line no-param-reassign\n state.exports[id.node.name] = id;\n }\n }\n}\n\nfunction collectFromExportDefaultDeclaration(\n path: NodePath<ExportDefaultDeclaration>,\n state: ILocalState\n): void {\n if (isType(path)) return;\n\n // eslint-disable-next-line no-param-reassign\n state.exports.default = path.get('declaration');\n}\n\nfunction collectFromAssignmentExpression(\n path: NodePath<AssignmentExpression>,\n state: ILocalState\n): void {\n if (isChainOfVoidAssignment(path)) {\n return;\n }\n\n const left = path.get('left');\n const right = path.get('right');\n\n let exported: IReexport['exported'] | undefined;\n\n if (left.isMemberExpression() && isExports(left.get('object'))) {\n const property = left.get('property');\n if (property.isIdentifier()) {\n exported = property.node.name;\n }\n } else if (isExports(left)) {\n // module.exports = ...\n if (!isAlreadyProcessed(right)) {\n exported = 'default';\n }\n }\n\n if (!exported) return;\n\n if (!right.isCallExpression() || !isRequire(right.get('callee'))) {\n // eslint-disable-next-line no-param-reassign\n state.exports[exported] = right;\n return;\n }\n\n const sourcePath = right.get('arguments')?.[0];\n const source = sourcePath.isStringLiteral()\n ? sourcePath.node.value\n : undefined;\n if (!source) return;\n\n // It is `exports.foo = require('./css');`\n\n if (state.exports[exported]) {\n // eslint-disable-next-line no-param-reassign\n delete state.exports[exported];\n }\n\n state.reexports.push({\n exported,\n imported: '*',\n local: path,\n source,\n });\n\n path.skip();\n}\n\nfunction collectFromExportStarCall(\n path: NodePath<CallExpression>,\n state: ILocalState\n) {\n const [requireCall, exports] = path.get('arguments');\n if (!isExports(exports)) return;\n if (!requireCall.isCallExpression()) return;\n const callee = requireCall.get('callee');\n const sourcePath = requireCall.get('arguments')?.[0];\n if (!isRequire(callee) || !sourcePath.isStringLiteral()) return;\n\n const source = sourcePath.node.value;\n if (!source) return;\n\n state.reexports.push({\n exported: '*',\n imported: '*',\n local: path,\n source,\n });\n\n path.skip();\n}\n\nfunction collectFromMap(map: NodePath<ObjectExpression>, state: ILocalState) {\n const properties = map.get('properties');\n properties.forEach((property) => {\n if (!property.isObjectProperty()) return;\n const key = property.get('key');\n const value = property.get('value');\n if (!key.isIdentifier()) return;\n const exported = key.node.name;\n\n if (!value.isFunction()) return;\n if (value.node.params.length !== 0) return;\n\n const returnValue = getReturnValue(value);\n if (!returnValue) return;\n\n addExport(returnValue, exported, state);\n });\n}\n\nfunction collectFromEsbuildExportCall(\n path: NodePath<CallExpression>,\n state: ILocalState\n) {\n const [sourceExports, map] = path.get('arguments');\n if (!sourceExports.isIdentifier({ name: 'source_exports' })) return;\n if (!map.isObjectExpression()) return;\n\n collectFromMap(map, state);\n\n path.skip();\n}\n\nfunction collectFromEsbuildReExportCall(\n path: NodePath<CallExpression>,\n state: ILocalState\n) {\n const [sourceExports, requireCall, exports] = path.get('arguments');\n if (!sourceExports.isIdentifier({ name: 'source_exports' })) return;\n if (!requireCall.isCallExpression()) return;\n if (!isExports(exports)) return;\n\n const callee = requireCall.get('callee');\n if (!isRequire(callee)) return;\n const sourcePath = requireCall.get('arguments')?.[0];\n if (!sourcePath.isStringLiteral()) return;\n\n state.reexports.push({\n exported: '*',\n imported: '*',\n local: path,\n source: sourcePath.node.value,\n });\n\n path.skip();\n}\n\nfunction collectFromSwcExportCall(\n path: NodePath<CallExpression>,\n state: ILocalState\n) {\n const [exports, map] = path.get('arguments');\n if (!isExports(exports)) return;\n if (!map.isObjectExpression()) return;\n\n collectFromMap(map, state);\n\n path.skip();\n}\n\nfunction collectFromCallExpression(\n path: NodePath<CallExpression>,\n state: ILocalState\n) {\n const maybeExportStart = path.get('callee');\n if (!maybeExportStart.isIdentifier()) {\n return;\n }\n\n const { name } = maybeExportStart.node;\n\n // TypeScript\n if (name.startsWith('__exportStar')) {\n collectFromExportStarCall(path, state);\n return;\n }\n\n // swc\n if (name === '_exportStar') {\n collectFromExportStarCall(path, state);\n }\n\n if (name === '_export') {\n collectFromSwcExportCall(path, state);\n }\n\n // esbuild\n if (name === '__export') {\n collectFromEsbuildExportCall(path, state);\n }\n\n if (name === '__reExport') {\n collectFromEsbuildReExportCall(path, state);\n }\n}\n\nexport function collectExportsAndImports(\n path: NodePath<Program>,\n cacheMode: 'disabled' | 'force' | 'enabled' = 'enabled'\n): IState {\n const localState: ILocalState = {\n deadExports: [],\n exportRefs: new Map(),\n exports: {},\n imports: [],\n reexports: [],\n isEsModule: path.node.sourceType === 'module',\n processedRequires: new WeakSet(),\n };\n\n const cache =\n cacheMode !== 'disabled'\n ? getTraversalCache<IState>(path, 'collectExportsAndImports')\n : undefined;\n\n if (cacheMode === 'enabled' && cache?.has(path)) {\n return cache.get(path) ?? localState;\n }\n\n path.traverse(\n {\n AssignmentExpression: collectFromAssignmentExpression,\n CallExpression: collectFromCallExpression,\n ExportAllDeclaration: collectFromExportAllDeclaration,\n ExportDefaultDeclaration: collectFromExportDefaultDeclaration,\n ExportNamedDeclaration: collectFromExportNamedDeclaration,\n ImportDeclaration: collectFromImportDeclaration,\n Import: collectFromDynamicImport,\n Identifier: collectFromRequireOrExports,\n VariableDeclarator: collectFromVariableDeclarator,\n },\n localState\n );\n\n const { processedRequires, ...state } = localState;\n\n cache?.set(path, state);\n\n return state;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"collectExportsAndImports.js","names":["_shared","require","_getScope","_isExports","_isNotNull","_isRequire","_isTypedNode","_traversalCache","sideEffectImport","item","imported","exports","explicitImport","getValue","node","type","name","value","isType","p","importKind","exportKind","collectors","ImportSpecifier","path","source","get","local","ImportDefaultSpecifier","ImportNamespaceSpecifier","unfoldNamespaceImport","collectFromImportDeclaration","state","specifiers","length","imports","push","forEach","specifier","isImportSpecifier","collector","getAncestorsWhile","cond","result","current","parentPath","whatIsDestructed","objectPattern","destructedProps","traverse","Identifier","identifier","isBindingIdentifier","parent","isObjectProperty","chain","filter","isTypedNode","map","key","isIdentifier","isNotNull","reverse","what","as","isRestElement","argument","debug","logger","extend","importFromVariableDeclarator","isSync","id","isObjectPattern","findIIFE","isCallExpression","isFunctionExpression","exportFromVariableDeclarator","init","binding","getScope","getBinding","iife","referencePaths","constantViolations","find","isExpression","reduce","acc","destructed","collectFromDynamicImport","callExpression","sourcePath","isStringLiteral","container","isAwaited","isAwaitExpression","isVariableDeclarator","prop","getCalleeName","callee","isMemberExpression","property","undefined","matchCall","rules","some","n","args","fnArgs","every","arg","i","getImportExportTypeByInteropFunction","argPath","isExports","isEmptyObject","isArrayExpression","isAlreadyProcessed","isRequireCall","isRequire","isObjectExpression","properties","pathOrName","collectFromRequire","processedRequires","has","add","reexports","exported","variableDeclarator","unfolded","isExpressionStatement","collectFromVariableDeclarator","found","identifierPath","skip","isChainOfVoidAssignment","right","isUnaryExpression","operator","isAssignmentExpression","getReturnValue","params","body","_body$get","returnStatement","isReturnStatement","getGetterValueFromDescriptor","descriptor","props","getter","isArrowFunctionExpression","valueProp","valueValue","addExport","getRelatedImport","object","objectBinding","scope","isAncestor","computed","import","relatedImport","collectFromExports","memberExpression","exportName","saveRef","exportRefs","set","assignmentExpression","left","isEsModule","matchesPattern","obj","collectFromRequireOrExports","importItem","referenced","referencePath","_binding$referencePat","ancestor","isTSType","isFlowType","listKey","importType","isExportSpecifier","isExportDefaultDeclaration","collectFromExportAllDeclaration","_path$get","collectFromExportSpecifier","isExportDefaultSpecifier","isExportNamespaceSpecifier","collectFromExportNamedDeclaration","_path$get2","declaration","isVariableDeclaration","declarator","isTSEnumDeclaration","isFunctionDeclaration","isClassDeclaration","collectFromExportDefaultDeclaration","default","collectFromAssignmentExpression","_right$get","imp","collectAllFromCall","_requireCall$get","requireCall","collectFromMap","isFunction","returnValue","collectMapFromCall","mapPosition","collectFromEsbuildReExportCall","_requireCall$get2","sourceExports","someCall","firstArg","collectFromCallExpression","maybeExportStart","secondArg","collectExportsAndImports","cacheMode","localState","deadExports","Map","sourceType","WeakSet","cache","getTraversalCache","_cache$get","AssignmentExpression","CallExpression","ExportAllDeclaration","ExportDefaultDeclaration","ExportNamedDeclaration","ImportDeclaration","Import","VariableDeclarator"],"sources":["../../src/utils/collectExportsAndImports.ts"],"sourcesContent":["/* eslint @typescript-eslint/no-use-before-define: [\"error\", { \"functions\": false }] */\n/* eslint-disable no-restricted-syntax,no-continue */\n\nimport type { NodePath } from '@babel/traverse';\nimport type {\n ArrayExpression,\n AssignmentExpression,\n BlockStatement,\n CallExpression,\n ExportAllDeclaration,\n ExportDefaultDeclaration,\n ExportDefaultSpecifier,\n ExportNamedDeclaration,\n ExportNamespaceSpecifier,\n ExportSpecifier,\n Expression,\n Function as FunctionNode,\n Identifier,\n Import,\n ImportDeclaration,\n ImportDefaultSpecifier,\n ImportNamespaceSpecifier,\n ImportSpecifier,\n MemberExpression,\n ObjectExpression,\n ObjectPattern,\n Program,\n StringLiteral,\n VariableDeclarator,\n} from '@babel/types';\n\nimport { logger } from '@wyw-in-js/shared';\n\nimport { getScope } from './getScope';\nimport { isExports } from './isExports';\nimport { isNotNull } from './isNotNull';\nimport { isRequire } from './isRequire';\nimport { isTypedNode } from './isTypedNode';\nimport { getTraversalCache } from './traversalCache';\n\nexport interface ISideEffectImport {\n imported: 'side-effect';\n local: NodePath;\n source: string;\n}\n\nexport interface IImport {\n imported: string | 'default' | '*';\n local: NodePath<Identifier | MemberExpression>;\n source: string;\n type: 'cjs' | 'dynamic' | 'esm';\n}\n\nexport type Exports = Record<string | 'default' | '*', NodePath>; // '*' means re-export all\n\nexport interface IReexport {\n exported: string | 'default' | '*';\n imported: string | 'default' | '*';\n local: NodePath;\n source: string;\n}\n\nexport interface IState {\n deadExports: string[];\n exportRefs: Map<string, NodePath<MemberExpression>[]>;\n exports: Exports;\n imports: (IImport | ISideEffectImport)[];\n isEsModule: boolean;\n reexports: IReexport[];\n}\n\ninterface ILocalState extends IState {\n processedRequires: WeakSet<NodePath>;\n}\n\nexport const sideEffectImport = (\n item: IImport | ISideEffectImport\n): item is ISideEffectImport => item.imported === 'side-effect';\n\nexport const explicitImport = (\n item: IImport | ISideEffectImport\n): item is IImport => item.imported !== 'side-effect';\n\nfunction getValue({ node }: { node: Identifier | StringLiteral }): string {\n return node.type === 'Identifier' ? node.name : node.value;\n}\n\n// We ignore imports and exports of types\nconst isType = (p: {\n node: { importKind?: 'type' | unknown } | { exportKind?: 'type' | unknown };\n}): boolean =>\n ('importKind' in p.node && p.node.importKind === 'type') ||\n ('exportKind' in p.node && p.node.exportKind === 'type');\n\n// Force TypeScript to check, that we have implementation for every possible specifier\ntype SpecifierTypes = ImportDeclaration['specifiers'][number];\nconst collectors: {\n [K in SpecifierTypes['type']]: (\n path: NodePath<SpecifierTypes & { type: K }>,\n source: string\n ) => IImport[];\n} = {\n ImportSpecifier(path: NodePath<ImportSpecifier>, source): IImport[] {\n if (isType(path)) return [];\n const imported = getValue(path.get('imported'));\n const local = path.get('local');\n return [{ imported, local, source, type: 'esm' }];\n },\n\n ImportDefaultSpecifier(\n path: NodePath<ImportDefaultSpecifier>,\n source\n ): IImport[] {\n const local = path.get('local');\n return [{ imported: 'default', local, source, type: 'esm' }];\n },\n\n ImportNamespaceSpecifier(\n path: NodePath<ImportNamespaceSpecifier>,\n source\n ): IImport[] {\n const local = path.get('local');\n return unfoldNamespaceImport({ imported: '*', local, source, type: 'esm' });\n },\n};\n\nfunction collectFromImportDeclaration(\n path: NodePath<ImportDeclaration>,\n state: ILocalState\n): void {\n // If importKind is specified, and it's not a value, ignore that import\n if (isType(path)) return;\n\n const source = getValue(path.get('source'));\n const specifiers = path.get('specifiers');\n\n if (specifiers.length === 0) {\n state.imports.push({ imported: 'side-effect', local: path, source });\n }\n\n specifiers.forEach(<T extends SpecifierTypes>(specifier: NodePath<T>) => {\n if (specifier.isImportSpecifier() && isType(specifier)) return;\n\n const collector = collectors[\n specifier.node.type\n ] as (typeof collectors)[T['type']];\n\n state.imports.push(...collector(specifier, source));\n });\n}\n\ninterface IDestructed {\n as: NodePath<Identifier>;\n what: string | '*';\n}\n\nfunction getAncestorsWhile(path: NodePath, cond: (p: NodePath) => boolean) {\n const result: NodePath[] = [];\n let current: NodePath | null = path;\n while (current && cond(current)) {\n result.push(current);\n current = current.parentPath;\n }\n\n return result;\n}\n\nfunction whatIsDestructed(\n objectPattern: NodePath<ObjectPattern>\n): IDestructed[] {\n const destructedProps: IDestructed[] = [];\n objectPattern.traverse({\n Identifier(identifier) {\n if (identifier.isBindingIdentifier()) {\n const parent = identifier.parentPath;\n if (parent.isObjectProperty({ value: identifier.node })) {\n const chain = getAncestorsWhile(parent, (p) => p !== objectPattern)\n .filter(isTypedNode('ObjectProperty'))\n .map((p) => {\n const key = p.get('key');\n if (!key.isIdentifier()) {\n // TODO: try to process other type of keys or at least warn about this\n return null;\n }\n\n return key;\n })\n .filter(isNotNull);\n chain.reverse();\n\n if (chain.length > 0) {\n destructedProps.push({\n what: chain[0].node.name,\n as: identifier,\n });\n }\n\n return;\n }\n\n if (parent.isRestElement({ argument: identifier.node })) {\n destructedProps.push({\n what: '*',\n as: identifier,\n });\n }\n }\n },\n });\n\n return destructedProps;\n}\n\nconst debug = logger.extend('evaluator:collectExportsAndImports');\n\nfunction importFromVariableDeclarator(\n path: NodePath<VariableDeclarator>,\n isSync: boolean\n): IDestructed[] {\n const id = path.get('id');\n if (id.isIdentifier()) {\n // It's the simplest case when the full namespace is imported\n return [\n {\n as: id,\n what: '*',\n },\n ];\n }\n\n if (!isSync) {\n // Something went wrong\n // Is it something like `const { … } = import(…)`?\n debug('`import` should be awaited');\n return [];\n }\n\n if (id.isObjectPattern()) {\n return whatIsDestructed(id);\n }\n\n // What else it can be?\n debug('importFromVariableDeclarator: unknown type of id %o', id.node.type);\n\n return [];\n}\n\nconst findIIFE = (path: NodePath): NodePath<CallExpression> | null => {\n if (path.isCallExpression() && path.get('callee').isFunctionExpression()) {\n return path;\n }\n\n if (!path.parentPath) {\n return null;\n }\n\n return findIIFE(path.parentPath);\n};\n\nfunction exportFromVariableDeclarator(\n path: NodePath<VariableDeclarator>\n): Exports {\n const id = path.get('id');\n const init = path.get('init');\n\n // If there is no init and id is an identifier, we should find IIFE\n if (!init.node && id.isIdentifier()) {\n const binding = getScope(path).getBinding(id.node.name);\n if (!binding) {\n return {};\n }\n\n const iife = [\n ...binding.referencePaths,\n ...binding.constantViolations,\n binding.path,\n ]\n .map(findIIFE)\n .find(isNotNull);\n\n if (!iife) {\n return {};\n }\n\n return {\n [id.node.name]: iife,\n };\n }\n\n if (!init || !init.isExpression()) {\n return {};\n }\n\n if (id.isIdentifier()) {\n // It is `export const a = 1;`\n return {\n [id.node.name]: init,\n };\n }\n\n if (id.isObjectPattern()) {\n // It is `export const { a, ...rest } = obj;`\n return whatIsDestructed(id).reduce<Exports>(\n (acc, destructed) => ({\n ...acc,\n [destructed.as.node.name]: init,\n }),\n {}\n );\n }\n\n // What else it can be?\n debug('exportFromVariableDeclarator: unknown type of id %o', id.node.type);\n\n return {};\n}\n\nfunction collectFromDynamicImport(\n path: NodePath<Import>,\n state: ILocalState\n): void {\n const { parentPath: callExpression } = path;\n if (!callExpression.isCallExpression()) {\n // It's wrong `import`\n return;\n }\n\n const [sourcePath] = callExpression.get('arguments');\n if (!sourcePath || !sourcePath.isStringLiteral()) {\n // Import should have at least one argument, and it should be StringLiteral\n return;\n }\n\n const source = sourcePath.node.value;\n\n let { parentPath: container, key } = callExpression;\n let isAwaited = false;\n\n if (container.isAwaitExpression()) {\n // If it's not awaited import, it imports the full namespace\n isAwaited = true;\n key = container.key;\n container = container.parentPath!;\n }\n\n // Is it `const something = await import(\"something\")`?\n if (key === 'init' && container.isVariableDeclarator()) {\n importFromVariableDeclarator(container, isAwaited).map((prop) =>\n state.imports.push({\n imported: prop.what,\n local: prop.as,\n source,\n type: 'dynamic',\n })\n );\n }\n}\n\nfunction getCalleeName(path: NodePath<CallExpression>): string | undefined {\n const callee = path.get('callee');\n if (callee.isIdentifier()) {\n return callee.node.name;\n }\n\n if (callee.isMemberExpression()) {\n const property = callee.get('property');\n if (property.isIdentifier()) {\n return property.node.name;\n }\n }\n\n return undefined;\n}\n\ntype MatchRule = [\n name: string,\n ...args: (NodePath | '*' | ((p: NodePath) => boolean))[],\n];\n\nconst matchCall = (p: NodePath<CallExpression>, rules: MatchRule[]) => {\n const name = getCalleeName(p);\n\n if (name === undefined) {\n return false;\n }\n\n return rules.some(([n, ...args]) => {\n if (name !== n) return false;\n const fnArgs = p.get('arguments');\n if (fnArgs.length !== args.length) return false;\n return args.every((arg, i) => {\n if (arg === '*') return true;\n if (typeof arg === 'function') return arg(fnArgs[i]);\n return arg === fnArgs[i];\n });\n });\n};\n\nfunction getImportExportTypeByInteropFunction(\n path: NodePath<CallExpression>,\n argPath: NodePath\n): 'import:*' | 're-export:*' | 'default' | undefined {\n if (matchCall(path, [['__exportStar', argPath, (p) => isExports(p)]])) {\n return 're-export:*';\n }\n\n if (\n matchCall(path, [\n ['_interopRequireDefault', argPath], // babel and swc <1.3.50\n ['_interop_require_default', argPath], // swc >=1.3.50\n ['__importDefault', argPath], // ?\n ])\n ) {\n return 'default';\n }\n\n if (\n matchCall(path, [\n ['_interopRequireWildcard', argPath], // babel and swc <1.3.50\n ['_interop_require_wildcard', argPath], // swc >=1.3.50\n ['__importStar', argPath], // ?\n ['__toESM', argPath], // esbuild >=0.14.7\n ['__toModule', argPath], // esbuild <0.14.7\n ])\n ) {\n return 'import:*';\n }\n\n if (\n matchCall(path, [\n ['_extends', isEmptyObject, argPath], // babel and swc\n ['__rest', argPath, isArrayExpression], // tsc and esbuild <=0.11.3\n ['__objRest', argPath, isArrayExpression], // esbuild >0.11.3\n ['_objectWithoutProperties', argPath, isArrayExpression], // babel and swc <1.3.50\n ['_object_without_properties', argPath, isArrayExpression], // swc >=1.3.50\n ['_objectDestructuringEmpty', argPath], // swc <1.3.50\n ['_object_destructuring_empty', argPath], // swc >=1.3.50\n ])\n ) {\n return 'import:*';\n }\n\n return undefined;\n}\n\nfunction isAlreadyProcessed(path: NodePath): boolean {\n if (\n path.isCallExpression() &&\n path.get('callee').isIdentifier({ name: '__toCommonJS' })\n ) {\n // because its esbuild and we already processed all exports\n return true;\n }\n\n return false;\n}\n\nfunction isRequireCall(path: NodePath): path is NodePath<CallExpression> {\n return path.isCallExpression() && isRequire(path.get('callee'));\n}\n\nfunction isEmptyObject(path: NodePath): path is NodePath<ObjectExpression> {\n return path.isObjectExpression() && path.node.properties.length === 0;\n}\n\nfunction isArrayExpression(path: NodePath): path is NodePath<ArrayExpression> {\n return path.isArrayExpression();\n}\n\nfunction isCallExpression(path: NodePath): path is NodePath<CallExpression>;\nfunction isCallExpression(\n calleeName: string\n): (path: NodePath) => path is NodePath<CallExpression>;\nfunction isCallExpression(pathOrName: NodePath | string) {\n if (typeof pathOrName === 'string') {\n return (p: NodePath) =>\n p.isCallExpression() &&\n p.get('callee').isIdentifier({ name: pathOrName });\n }\n\n return pathOrName.isCallExpression();\n}\n\nfunction isObjectExpression(\n path: NodePath\n): path is NodePath<ObjectExpression> {\n return path.isObjectExpression();\n}\n\nfunction isIdentifier(name: string) {\n return (path: NodePath): path is NodePath<Identifier> =>\n path.isIdentifier({ name });\n}\n\nfunction collectFromRequire(\n path: NodePath<Identifier>,\n state: ILocalState\n): void {\n if (!isRequire(path)) return;\n\n // This method can be reached many times from multiple visitors for the same path\n // So we need to check if we already processed it\n if (state.processedRequires.has(path)) return;\n state.processedRequires.add(path);\n\n const { parentPath: callExpression } = path;\n if (!callExpression.isCallExpression()) {\n // It's wrong `require`\n return;\n }\n\n const [sourcePath] = callExpression.get('arguments');\n if (!sourcePath || !sourcePath.isStringLiteral()) {\n // Import should have at least one argument, and it should be StringLiteral\n return;\n }\n\n const source = sourcePath.node.value;\n\n const { parentPath: container, key } = callExpression;\n\n if (container.isCallExpression()) {\n // It may be transpiled import such as\n // `var _atomic = _interopRequireDefault(require(\"@linaria/atomic\"));`\n const imported = getImportExportTypeByInteropFunction(\n container,\n callExpression\n );\n if (!imported) {\n // It's not a transpiled import.\n // TODO: Can we guess that it's a namespace import?\n debug('Unknown wrapper of require: %o', container.node.callee);\n return;\n }\n\n if (imported === 're-export:*') {\n state.reexports.push({\n exported: '*',\n imported: '*',\n local: path,\n source,\n });\n\n return;\n }\n\n let { parentPath: variableDeclarator } = container;\n if (variableDeclarator.isCallExpression()) {\n if (variableDeclarator.get('callee').isIdentifier({ name: '_extends' })) {\n variableDeclarator = variableDeclarator.parentPath!;\n }\n }\n\n if (!variableDeclarator.isVariableDeclarator()) {\n // TODO: Where else it can be?\n debug('Unexpected require inside %o', variableDeclarator.node.type);\n return;\n }\n\n const id = variableDeclarator.get('id');\n if (!id.isIdentifier()) {\n debug('Id should be Identifier %o', variableDeclarator.node.type);\n return;\n }\n\n if (imported === 'import:*') {\n const unfolded = unfoldNamespaceImport({\n imported: '*',\n local: id,\n source,\n type: 'cjs',\n });\n state.imports.push(...unfolded);\n } else {\n state.imports.push({\n imported,\n local: id,\n source,\n type: 'cjs',\n });\n }\n }\n\n if (container.isMemberExpression()) {\n // It is `require('@linaria/shaker').dep`\n const property = container.get('property');\n if (!property.isIdentifier() && !property.isStringLiteral()) {\n debug(\n 'Property should be Identifier or StringLiteral %s',\n property.node.type\n );\n\n return;\n }\n\n const { parentPath: variableDeclarator } = container;\n\n if (variableDeclarator.isVariableDeclarator()) {\n // It is `const … = require('@linaria/shaker').dep`;\n const id = variableDeclarator.get('id');\n if (id.isIdentifier()) {\n state.imports.push({\n imported: getValue(property),\n local: id,\n source,\n type: 'cjs',\n });\n } else {\n debug('Id should be Identifier %o', variableDeclarator.node.type);\n }\n } else {\n // Maybe require is passed as an argument to some function?\n // Just use the whole MemberExpression as a local\n state.imports.push({\n imported: getValue(property),\n local: container,\n source,\n type: 'cjs',\n });\n }\n\n return;\n }\n\n // Is it `const something = require(\"something\")`?\n if (key === 'init' && container.isVariableDeclarator()) {\n importFromVariableDeclarator(container, true).forEach((prop) => {\n if (prop.what === '*') {\n const unfolded = unfoldNamespaceImport({\n imported: '*',\n local: prop.as,\n source,\n type: 'cjs',\n });\n\n state.imports.push(...unfolded);\n } else {\n state.imports.push({\n imported: prop.what,\n local: prop.as,\n source,\n type: 'cjs',\n });\n }\n });\n }\n\n if (container.isExpressionStatement()) {\n // Looks like standalone require\n state.imports.push({\n imported: 'side-effect',\n local: container,\n source,\n });\n }\n}\n\nfunction collectFromVariableDeclarator(\n path: NodePath<VariableDeclarator>,\n state: ILocalState\n): void {\n let found = false;\n path.traverse({\n Identifier(identifierPath) {\n if (isRequire(identifierPath)) {\n collectFromRequire(identifierPath, state);\n found = true;\n }\n },\n });\n\n if (found) {\n path.skip();\n }\n}\n\nfunction isChainOfVoidAssignment(\n path: NodePath<AssignmentExpression>\n): boolean {\n const right = path.get('right');\n if (right.isUnaryExpression({ operator: 'void' })) {\n return true;\n }\n\n if (right.isAssignmentExpression()) {\n return isChainOfVoidAssignment(right);\n }\n\n return false;\n}\n\nfunction getReturnValue(\n path: NodePath<FunctionNode>\n): NodePath<Expression> | undefined {\n if (path.node.params.length !== 0) return undefined;\n\n const body = path.get('body') as\n | NodePath<BlockStatement>\n | NodePath<Expression>;\n if (body.isExpression()) {\n return body;\n }\n\n if (body.node.body.length === 1) {\n const returnStatement = body.get('body')?.[0];\n if (!returnStatement.isReturnStatement()) return undefined;\n const argument = returnStatement.get('argument');\n if (!argument.isExpression()) return undefined;\n return argument;\n }\n\n return undefined;\n}\n\nfunction getGetterValueFromDescriptor(\n descriptor: NodePath<ObjectExpression>\n): NodePath<Expression> | undefined {\n const props = descriptor\n .get('properties')\n .filter(isTypedNode('ObjectProperty'));\n\n const getter = props.find((p) => p.get('key').isIdentifier({ name: 'get' }));\n const value = getter?.get('value');\n\n if (value?.isFunctionExpression() || value?.isArrowFunctionExpression()) {\n return getReturnValue(value);\n }\n\n const valueProp = props.find((p) =>\n p.get('key').isIdentifier({ name: 'value' })\n );\n\n const valueValue = valueProp?.get('value');\n\n return valueValue?.isExpression() ? valueValue : undefined;\n}\n\nfunction addExport(path: NodePath, exported: string, state: ILocalState): void {\n function getRelatedImport() {\n if (path.isMemberExpression()) {\n const object = path.get('object');\n if (!object.isIdentifier()) {\n return undefined;\n }\n\n const objectBinding = object.scope.getBinding(object.node.name);\n if (!objectBinding) {\n return undefined;\n }\n\n if (objectBinding.path.isVariableDeclarator()) {\n collectFromVariableDeclarator(objectBinding.path, state);\n }\n\n const found = state.imports.find(\n (i) =>\n objectBinding.identifier === i.local.node ||\n objectBinding.referencePaths.some((p) => i.local.isAncestor(p))\n );\n\n if (!found) {\n return undefined;\n }\n\n const property = path.get('property');\n let what = '*';\n if (path.node.computed && property.isStringLiteral()) {\n what = property.node.value;\n } else if (!path.node.computed && property.isIdentifier()) {\n what = property.node.name;\n }\n\n return {\n import: { ...found, local: path },\n what,\n };\n }\n\n return undefined;\n }\n\n const relatedImport = getRelatedImport();\n if (relatedImport) {\n // eslint-disable-next-line no-param-reassign\n state.reexports.push({\n local: relatedImport.import.local,\n imported: relatedImport.import.imported,\n source: relatedImport.import.source,\n exported,\n });\n } else {\n // eslint-disable-next-line no-param-reassign\n state.exports[exported] = path;\n }\n}\n\nfunction collectFromExports(\n path: NodePath<Identifier>,\n state: ILocalState\n): void {\n if (!isExports(path)) return;\n\n if (path.parentPath.isMemberExpression({ object: path.node })) {\n // It is `exports.prop = …`\n const memberExpression = path.parentPath;\n const property = memberExpression.get('property');\n if (!property.isIdentifier() || memberExpression.node.computed) {\n return;\n }\n\n const exportName = property.node.name;\n\n const saveRef = () => {\n // Save all export.____ usages for later\n if (!state.exportRefs.has(exportName)) {\n state.exportRefs.set(exportName, []);\n }\n\n state.exportRefs.get(exportName)!.push(memberExpression);\n };\n\n const assignmentExpression = memberExpression.parentPath;\n\n if (\n !assignmentExpression.isAssignmentExpression({\n left: memberExpression.node,\n })\n ) {\n // If it's not `exports.prop = …`. Just save it.\n saveRef();\n return;\n }\n\n const right = assignmentExpression.get('right');\n\n if (isChainOfVoidAssignment(assignmentExpression)) {\n // It is `exports.foo = void 0`\n return;\n }\n\n if (exportName === '__esModule') {\n // eslint-disable-next-line no-param-reassign\n state.isEsModule = true;\n return;\n }\n\n saveRef();\n // eslint-disable-next-line no-param-reassign\n state.exports[property.node.name] = right;\n\n return;\n }\n\n if (\n path.parentPath.isCallExpression() &&\n path.parentPath.get('callee').matchesPattern('Object.defineProperty')\n ) {\n const [obj, prop, descriptor] = path.parentPath.get('arguments');\n if (\n obj?.isIdentifier(path.node) &&\n prop?.isStringLiteral() &&\n descriptor?.isObjectExpression()\n ) {\n if (prop.node.value === '__esModule') {\n // eslint-disable-next-line no-param-reassign\n state.isEsModule = true;\n } else {\n /**\n * Object.defineProperty(exports, \"token\", {\n * enumerable: true,\n * get: function get() {\n * return _unknownPackage.token;\n * }\n * });\n */\n const exported = prop.node.value;\n const local = getGetterValueFromDescriptor(descriptor);\n if (local) {\n addExport(local, exported, state);\n }\n }\n } else if (\n obj?.isIdentifier(path.node) &&\n prop?.isIdentifier() &&\n descriptor?.isObjectExpression()\n ) {\n /**\n * Object.defineProperty(exports, key, {\n * enumerable: true,\n * get: function get() {\n * return _unknownPackage[key];\n * }\n * });\n */\n const local = getGetterValueFromDescriptor(descriptor);\n if (local) {\n addExport(local, '*', state);\n }\n }\n }\n}\n\nfunction collectFromRequireOrExports(\n path: NodePath<Identifier>,\n state: ILocalState\n): void {\n if (isRequire(path)) {\n collectFromRequire(path, state);\n } else if (isExports(path)) {\n collectFromExports(path, state);\n }\n}\n\nfunction unfoldNamespaceImport(\n importItem: IImport & { imported: '*' }\n): IImport[] {\n const result: IImport[] = [];\n const { local } = importItem;\n if (!local.isIdentifier()) {\n // TODO: handle it\n return [importItem];\n }\n\n const binding = getScope(local).getBinding(local.node.name);\n if (!binding?.referenced) {\n // Imported namespace is not referenced and probably not used,\n // but it can have side effects, so we should keep it as is\n return [\n {\n ...importItem,\n imported: 'side-effect',\n },\n ];\n }\n\n for (const referencePath of binding?.referencePaths ?? []) {\n if (\n referencePath.find(\n (ancestor) => ancestor.isTSType() || ancestor.isFlowType()\n )\n ) {\n continue;\n }\n\n const { parentPath } = referencePath;\n if (parentPath?.isMemberExpression() && referencePath.key === 'object') {\n const property = parentPath.get('property');\n const object = parentPath.get('object');\n let imported: string | null;\n if (parentPath.node.computed && property.isStringLiteral()) {\n imported = property.node.value;\n } else if (!parentPath.node.computed && property.isIdentifier()) {\n imported = property.node.name;\n } else {\n imported = null;\n }\n\n if (object.isIdentifier() && imported) {\n result.push({\n ...importItem,\n imported,\n local: parentPath,\n });\n } else {\n result.push(importItem);\n break;\n }\n\n continue;\n }\n\n if (parentPath?.isVariableDeclarator() && referencePath.key === 'init') {\n importFromVariableDeclarator(parentPath, true).map((prop) =>\n result.push({ ...importItem, imported: prop.what, local: prop.as })\n );\n\n continue;\n }\n\n if (\n parentPath?.isCallExpression() &&\n referencePath.listKey === 'arguments'\n ) {\n // The defined variable is used as a function argument. Let's try to figure out what is imported.\n const importType = getImportExportTypeByInteropFunction(\n parentPath,\n referencePath\n );\n\n if (!importType) {\n // Imported value is used as an unknown function argument,\n // so we can't predict usage and import it as is.\n result.push(importItem);\n break;\n }\n\n if (importType === 'default') {\n result.push({\n ...importItem,\n imported: 'default',\n local: parentPath.get('id') as NodePath<Identifier>,\n });\n\n continue;\n }\n\n if (importType === 'import:*') {\n result.push(importItem);\n break;\n }\n\n debug('unfoldNamespaceImports: unknown import type %o', importType);\n\n result.push(importItem);\n continue;\n }\n\n if (\n parentPath?.isExportSpecifier() ||\n parentPath?.isExportDefaultDeclaration()\n ) {\n // The whole namespace is re-exported\n result.push(importItem);\n break;\n }\n\n // Otherwise, we can't predict usage and import it as is\n // TODO: handle more cases\n debug(\n 'unfoldNamespaceImports: unknown reference %o',\n referencePath.node.type\n );\n result.push(importItem);\n break;\n }\n\n return result;\n}\n\nfunction collectFromExportAllDeclaration(\n path: NodePath<ExportAllDeclaration>,\n state: ILocalState\n): void {\n if (isType(path)) return;\n const source = path.get('source')?.node?.value;\n if (!source) return;\n\n // It is `export * from './css';`\n state.reexports.push({\n exported: '*',\n imported: '*',\n local: path,\n source,\n });\n}\n\nfunction collectFromExportSpecifier(\n path: NodePath<\n ExportSpecifier | ExportDefaultSpecifier | ExportNamespaceSpecifier\n >,\n source: string | undefined,\n state: ILocalState\n): void {\n if (path.isExportSpecifier()) {\n const exported = getValue(path.get('exported'));\n if (source) {\n // It is `export { foo } from './css';`\n const imported = path.get('local').node.name;\n state.reexports.push({\n exported,\n imported,\n local: path,\n source,\n });\n } else {\n const local = path.get('local');\n // eslint-disable-next-line no-param-reassign\n state.exports[exported] = local;\n }\n\n return;\n }\n\n if (path.isExportDefaultSpecifier() && source) {\n // It is `export default from './css';`\n state.reexports.push({\n exported: 'default',\n imported: 'default',\n local: path,\n source,\n });\n }\n\n if (path.isExportNamespaceSpecifier() && source) {\n const exported = path.get('exported').node.name;\n // It is `export * as foo from './css';`\n state.reexports.push({\n exported,\n imported: '*',\n local: path,\n source,\n });\n }\n\n // TODO: handle other cases\n debug(\n 'collectFromExportSpecifier: unprocessed ExportSpecifier %o',\n path.node.type\n );\n}\n\nfunction collectFromExportNamedDeclaration(\n path: NodePath<ExportNamedDeclaration>,\n state: ILocalState\n): void {\n if (isType(path)) return;\n\n const source = path.get('source')?.node?.value;\n const specifiers = path.get('specifiers');\n if (specifiers) {\n specifiers.forEach((specifier) =>\n collectFromExportSpecifier(specifier, source, state)\n );\n }\n\n const declaration = path.get('declaration');\n if (declaration.isVariableDeclaration()) {\n declaration.get('declarations').forEach((declarator) => {\n // eslint-disable-next-line no-param-reassign\n state.exports = {\n ...state.exports,\n ...exportFromVariableDeclarator(declarator),\n };\n });\n }\n\n if (declaration.isTSEnumDeclaration()) {\n // eslint-disable-next-line no-param-reassign\n state.exports[declaration.get('id').node.name] = declaration;\n }\n\n if (declaration.isFunctionDeclaration()) {\n const id = declaration.get('id');\n if (id.isIdentifier()) {\n // eslint-disable-next-line no-param-reassign\n state.exports[id.node.name] = id;\n }\n }\n\n if (declaration.isClassDeclaration()) {\n const id = declaration.get('id');\n if (id.isIdentifier()) {\n // eslint-disable-next-line no-param-reassign\n state.exports[id.node.name] = id;\n }\n }\n}\n\nfunction collectFromExportDefaultDeclaration(\n path: NodePath<ExportDefaultDeclaration>,\n state: ILocalState\n): void {\n if (isType(path)) return;\n\n // eslint-disable-next-line no-param-reassign\n state.exports.default = path.get('declaration');\n}\n\nfunction collectFromAssignmentExpression(\n path: NodePath<AssignmentExpression>,\n state: ILocalState\n): void {\n if (isChainOfVoidAssignment(path)) {\n return;\n }\n\n const left = path.get('left');\n const right = path.get('right');\n\n let exported: IReexport['exported'] | undefined;\n\n if (left.isMemberExpression() && isExports(left.get('object'))) {\n const property = left.get('property');\n if (!left.node.computed && property.isIdentifier()) {\n exported = property.node.name;\n } else if (left.node.computed && property.isStringLiteral()) {\n exported = property.node.value;\n }\n } else if (isExports(left)) {\n // module.exports = ...\n if (!isAlreadyProcessed(right)) {\n exported = 'default';\n }\n }\n\n if (!exported) return;\n\n if (exported === '__esModule') {\n // eslint-disable-next-line no-param-reassign\n state.isEsModule = true;\n return;\n }\n\n if (!isRequireCall(right)) {\n const relatedImport = state.imports.find((imp) => imp.local === right);\n if (relatedImport) {\n state.reexports.push({\n exported,\n ...relatedImport,\n });\n } else {\n // eslint-disable-next-line no-param-reassign\n state.exports[exported] = right;\n }\n\n path.skip();\n return;\n }\n\n const sourcePath = right.get('arguments')?.[0];\n const source = sourcePath.isStringLiteral()\n ? sourcePath.node.value\n : undefined;\n if (!source) return;\n\n // It is `exports.foo = require('./css');`\n\n if (state.exports[exported]) {\n // eslint-disable-next-line no-param-reassign\n delete state.exports[exported];\n }\n\n state.reexports.push({\n exported,\n imported: '*',\n local: path,\n source,\n });\n\n path.skip();\n}\n\nfunction collectAllFromCall(\n path: NodePath<CallExpression>,\n require: number | NodePath,\n state: ILocalState\n) {\n const requireCall =\n typeof require === 'number' ? path.get('arguments')[require] : require;\n if (!requireCall.isCallExpression()) return;\n const callee = requireCall.get('callee');\n const sourcePath = requireCall.get('arguments')?.[0];\n if (!isRequire(callee) || !sourcePath.isStringLiteral()) return;\n\n const source = sourcePath.node.value;\n if (!source) return;\n\n state.reexports.push({\n exported: '*',\n imported: '*',\n local: path,\n source,\n });\n\n path.skip();\n}\n\nfunction collectFromMap(map: NodePath<ObjectExpression>, state: ILocalState) {\n const properties = map.get('properties');\n properties.forEach((property) => {\n if (!property.isObjectProperty()) return;\n const key = property.get('key');\n const value = property.get('value');\n if (!key.isIdentifier()) return;\n const exported = key.node.name;\n\n if (!value.isFunction()) return;\n if (value.node.params.length !== 0) return;\n\n const returnValue = getReturnValue(value);\n if (!returnValue) return;\n\n addExport(returnValue, exported, state);\n });\n}\n\nfunction collectMapFromCall(\n path: NodePath<CallExpression>,\n mapPosition: number,\n state: ILocalState\n) {\n const map = path.get('arguments')[mapPosition];\n if (!map.isObjectExpression()) return;\n\n collectFromMap(map, state);\n\n path.skip();\n}\n\nfunction collectFromEsbuildReExportCall(\n path: NodePath<CallExpression>,\n state: ILocalState\n) {\n const [sourceExports, someCall, exports] = path.get('arguments');\n if (\n !sourceExports.isIdentifier({ name: 'source_exports' }) &&\n !isExports(sourceExports)\n )\n return;\n if (!someCall.isCallExpression()) return;\n\n let requireCall = someCall;\n while (!isRequire(requireCall.get('callee'))) {\n const args = requireCall.get('arguments');\n if (args.length !== 1) {\n return;\n }\n\n const firstArg = args[0];\n if (!firstArg.isCallExpression()) {\n return;\n }\n\n requireCall = firstArg;\n }\n\n if (exports !== undefined && !isExports(exports)) return;\n\n const sourcePath = requireCall.get('arguments')?.[0];\n if (!sourcePath.isStringLiteral()) return;\n\n state.reexports.push({\n exported: '*',\n imported: '*',\n local: path,\n source: sourcePath.node.value,\n });\n\n path.skip();\n}\n\nfunction collectFromCallExpression(\n path: NodePath<CallExpression>,\n state: ILocalState\n) {\n const maybeExportStart = path.get('callee');\n if (!maybeExportStart.isIdentifier()) {\n return;\n }\n\n if (\n matchCall(path, [\n ['__exportStar', isExports, isCallExpression('__toModule')],\n ])\n ) {\n // __exportStar(exports, __toModule(require('…')));\n\n const secondArg = path.get('arguments')[1] as NodePath<CallExpression>;\n collectAllFromCall(path, secondArg.get('arguments')[0], state);\n return;\n }\n\n // TypeScript & swc\n if (\n matchCall(path, [\n ['__exportStart', isRequireCall, isExports],\n ['_exportStar', isRequireCall, isExports],\n ['_export_star', isRequireCall, isExports],\n ['__export', isRequireCall], // TypeScript <=3.8.3\n ])\n ) {\n collectAllFromCall(path, 0, state);\n return;\n }\n\n if (matchCall(path, [['_export', isExports, isObjectExpression]])) {\n collectMapFromCall(path, 1, state);\n return;\n }\n\n if (\n matchCall(path, [\n ['_extends', isEmptyObject, isRequireCall], // swc <=1.3.16\n ])\n ) {\n collectAllFromCall(path, 1, state);\n return;\n }\n\n // esbuild\n if (\n matchCall(path, [\n ['__export', isExports, isObjectExpression],\n ['__export', isIdentifier('source_exports'), isObjectExpression],\n ])\n ) {\n collectMapFromCall(path, 1, state);\n return;\n }\n\n if (\n matchCall(path, [\n // Different variants of re-exports in esbuild\n [\n '__reExport',\n isIdentifier('source_exports'),\n isCallExpression,\n isExports,\n ],\n ['__reExport', isIdentifier('source_exports'), isCallExpression],\n ['__reExport', isExports, isCallExpression],\n ])\n ) {\n collectFromEsbuildReExportCall(path, state);\n }\n}\n\nexport function collectExportsAndImports(\n path: NodePath<Program>,\n cacheMode: 'disabled' | 'force' | 'enabled' = 'enabled'\n): IState {\n const localState: ILocalState = {\n deadExports: [],\n exportRefs: new Map(),\n exports: {},\n imports: [],\n reexports: [],\n isEsModule: path.node.sourceType === 'module',\n processedRequires: new WeakSet(),\n };\n\n const cache =\n cacheMode !== 'disabled'\n ? getTraversalCache<IState>(path, 'collectExportsAndImports')\n : undefined;\n\n if (cacheMode === 'enabled' && cache?.has(path)) {\n return cache.get(path) ?? localState;\n }\n\n path.traverse(\n {\n AssignmentExpression: collectFromAssignmentExpression,\n CallExpression: collectFromCallExpression,\n ExportAllDeclaration: collectFromExportAllDeclaration,\n ExportDefaultDeclaration: collectFromExportDefaultDeclaration,\n ExportNamedDeclaration: collectFromExportNamedDeclaration,\n ImportDeclaration: collectFromImportDeclaration,\n Import: collectFromDynamicImport,\n Identifier: collectFromRequireOrExports,\n VariableDeclarator: collectFromVariableDeclarator,\n },\n localState\n );\n\n const { processedRequires, ...state } = localState;\n\n cache?.set(path, state);\n\n return state;\n}\n"],"mappings":"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"}
|
|
@@ -16,7 +16,7 @@ var _valueToLiteral = require("./valueToLiteral");
|
|
|
16
16
|
/* eslint @typescript-eslint/no-use-before-define: ["error", { "functions": false }] */
|
|
17
17
|
|
|
18
18
|
/**
|
|
19
|
-
* This file is a visitor that checks TaggedTemplateExpressions and look for
|
|
19
|
+
* This file is a visitor that checks TaggedTemplateExpressions and look for WYW template literals.
|
|
20
20
|
* For each template it makes a list of dependencies, try to evaluate expressions, and if it is not possible, mark them as lazy dependencies.
|
|
21
21
|
*/
|
|
22
22
|
|
|
@@ -109,7 +109,7 @@ function hoistIdentifier(idPath) {
|
|
|
109
109
|
|
|
110
110
|
/**
|
|
111
111
|
* Only an expression that can be evaluated in the root scope can be
|
|
112
|
-
* used in a
|
|
112
|
+
* used in a WYW template. This function tries to hoist the expression.
|
|
113
113
|
* @param ex The expression to hoist.
|
|
114
114
|
* @param evaluate If true, we try to statically evaluate the expression.
|
|
115
115
|
* @param imports All the imports of the file.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collectTemplateDependencies.js","names":["_template","require","_types","_shared","_createId","_findIdentifiers","_getSource","_scopeHelpers","_valueToLiteral","staticEval","ex","evaluate","undefined","result","confident","hasEvalMeta","value","expressionDeclarationTpl","statement","preserveComments","unsupported","reason","buildCodeFrameError","isIdentifier","getUidInRootScope","path","name","node","rootScope","scope","getProgramParent","hasBinding","generateUid","hoistVariableDeclarator","parent","referencedIdentifiers","findIdentifiers","forEach","identifier","hoistIdentifier","bindingIdentifiers","newName","rename","statementInRoot","findParent","p","_p$parentPath","parentPath","isProgram","declaration","type","kind","declarations","cloneNode","inserted","insertBefore","referenceAll","registerDeclaration","idPath","isReferenced","binding","getBinding","includes","bindingPath","isVariableDeclarator","extractExpression","imports","isLiteral","ValueType","CONST","loc","_p$parentPath2","isFunction","isFunctionExpression","isArrowFunctionExpression","expUid","evaluated","id","evaluatedId","mutate","replaceWith","valueToLiteral","FUNCTION","LAZY","expId","createId","expression","importedFrom","findImportSourceOfIdentifier","_idPath$scope$getBind","_imports$find","exBindingIdentifier","exImport","find","i","local","push","source","traverse","Identifier","callee","arguments","debug","logger","extend","collectTemplateDependencies","quasi","get","quasis","expressions","length","expressionValues","map","bind","getSource","isExpression","extracted"],"sources":["../../src/utils/collectTemplateDependencies.ts"],"sourcesContent":["/* eslint @typescript-eslint/no-use-before-define: [\"error\", { \"functions\": false }] */\n\n/**\n * This file is a visitor that checks TaggedTemplateExpressions and look for Linaria css or styled templates.\n * For each template it makes a list of dependencies, try to evaluate expressions, and if it is not possible, mark them as lazy dependencies.\n */\n\nimport { statement } from '@babel/template';\nimport type { NodePath } from '@babel/traverse';\nimport type {\n Expression,\n Identifier,\n JSXIdentifier,\n Statement,\n TaggedTemplateExpression,\n TemplateElement,\n TSType,\n VariableDeclaration,\n VariableDeclarator,\n} from '@babel/types';\nimport { cloneNode } from '@babel/types';\n\nimport type {\n ConstValue,\n ExpressionValue,\n FunctionValue,\n LazyValue,\n} from '@wyw-in-js/shared';\nimport { hasEvalMeta, ValueType, logger } from '@wyw-in-js/shared';\n\nimport type { IImport } from './collectExportsAndImports';\nimport { createId } from './createId';\nimport { findIdentifiers } from './findIdentifiers';\nimport { getSource } from './getSource';\nimport { mutate, referenceAll } from './scopeHelpers';\nimport { valueToLiteral } from './valueToLiteral';\n\nfunction staticEval(\n ex: NodePath<Expression>,\n evaluate = false\n): [unknown] | undefined {\n if (!evaluate) return undefined;\n\n const result = ex.evaluate();\n if (result.confident && !hasEvalMeta(result.value)) {\n return [result.value];\n }\n\n return undefined;\n}\n\nconst expressionDeclarationTpl = statement(\n 'const %%expId%% = /*#__PURE__*/ () => %%expression%%',\n {\n preserveComments: true,\n }\n);\n\nconst unsupported = (ex: NodePath, reason?: string): Error =>\n ex.buildCodeFrameError(\n `This ${\n ex.isIdentifier() ? 'identifier' : 'expression'\n } cannot be used in the template${reason ? `, because it ${reason}` : ''}.`\n );\n\nfunction getUidInRootScope(path: NodePath<Identifier | JSXIdentifier>): string {\n const { name } = path.node;\n const rootScope = path.scope.getProgramParent();\n if (rootScope.hasBinding(name)) {\n return rootScope.generateUid(name);\n }\n\n return name;\n}\n\nfunction hoistVariableDeclarator(ex: NodePath<VariableDeclarator>) {\n if (!ex.scope.parent) {\n // It is already in the root scope\n return;\n }\n\n const referencedIdentifiers = findIdentifiers([ex], 'reference');\n referencedIdentifiers.forEach((identifier) => {\n if (identifier.isIdentifier()) {\n hoistIdentifier(identifier);\n }\n });\n\n const bindingIdentifiers = findIdentifiers([ex], 'declaration');\n\n bindingIdentifiers.forEach((path) => {\n const newName = getUidInRootScope(path);\n if (newName !== path.node.name) {\n path.scope.rename(path.node.name, newName);\n }\n });\n\n const rootScope = ex.scope.getProgramParent();\n\n const statementInRoot = ex.findParent(\n (p) => p.parentPath?.isProgram() === true\n ) as NodePath<Statement>;\n\n const declaration: VariableDeclaration = {\n type: 'VariableDeclaration',\n kind: 'let',\n declarations: [cloneNode(ex.node)],\n };\n\n const [inserted] = statementInRoot.insertBefore(declaration);\n referenceAll(inserted);\n rootScope.registerDeclaration(inserted);\n}\n\nfunction hoistIdentifier(idPath: NodePath<Identifier>): void {\n if (!idPath.isReferenced()) {\n throw unsupported(idPath);\n }\n\n const binding = idPath.scope.getBinding(idPath.node.name);\n if (!binding) {\n // It's something strange\n throw unsupported(idPath, 'is undefined');\n }\n\n if (binding.kind === 'module') {\n // Modules are global by default\n return;\n }\n\n if (!['var', 'let', 'const', 'hoisted'].includes(binding.kind)) {\n // This is not a variable, we can't hoist it\n throw unsupported(binding.path, 'is a function parameter');\n }\n\n const { scope, path: bindingPath } = binding;\n // parent here can be null or undefined in different versions of babel\n if (!scope.parent) {\n // The variable is already in the root scope\n return;\n }\n\n if (bindingPath.isVariableDeclarator()) {\n hoistVariableDeclarator(bindingPath);\n\n return;\n }\n\n throw unsupported(idPath);\n}\n\n/**\n * Only an expression that can be evaluated in the root scope can be\n * used in a Linaria template. This function tries to hoist the expression.\n * @param ex The expression to hoist.\n * @param evaluate If true, we try to statically evaluate the expression.\n * @param imports All the imports of the file.\n */\nexport function extractExpression(\n ex: NodePath<Expression>,\n evaluate = false,\n imports: IImport[] = []\n): Omit<ExpressionValue, 'buildCodeFrameError' | 'source'> {\n if (\n ex.isLiteral() &&\n ('value' in ex.node || ex.node.type === 'NullLiteral')\n ) {\n return {\n ex: ex.node,\n kind: ValueType.CONST,\n value: ex.node.type === 'NullLiteral' ? null : ex.node.value,\n } as Omit<ConstValue, 'buildCodeFrameError' | 'source'>;\n }\n\n const { loc } = ex.node;\n\n const rootScope = ex.scope.getProgramParent();\n const statementInRoot = ex.findParent(\n (p) => p.parentPath?.isProgram() === true\n ) as NodePath<Statement>;\n\n const isFunction =\n ex.isFunctionExpression() || ex.isArrowFunctionExpression();\n\n // Generate next _expN name\n const expUid = rootScope.generateUid('exp');\n\n const evaluated = staticEval(ex, evaluate);\n\n if (!evaluated) {\n // If expression is not statically evaluable,\n // we need to hoist all its referenced identifiers\n\n // Collect all referenced identifiers\n findIdentifiers([ex], 'reference').forEach((id) => {\n if (!id.isIdentifier()) return;\n\n // Try to evaluate and inline them…\n const evaluatedId = staticEval(id, evaluate);\n if (evaluatedId) {\n mutate(id, (p) => {\n p.replaceWith(valueToLiteral(evaluatedId[0], ex));\n });\n } else {\n // … or hoist them to the root scope\n hoistIdentifier(id);\n }\n });\n }\n\n const kind = isFunction ? ValueType.FUNCTION : ValueType.LAZY;\n\n // Declare _expN const with the lazy expression\n const declaration = expressionDeclarationTpl({\n expId: createId(expUid),\n expression: evaluated\n ? valueToLiteral(evaluated[0], ex)\n : cloneNode(ex.node),\n }) as VariableDeclaration;\n\n // Insert the declaration as close as possible to the original expression\n const [inserted] = statementInRoot.insertBefore(declaration);\n referenceAll(inserted);\n rootScope.registerDeclaration(inserted);\n\n const importedFrom: string[] = [];\n function findImportSourceOfIdentifier(idPath: NodePath<Identifier>) {\n const exBindingIdentifier = idPath.scope.getBinding(idPath.node.name)\n ?.identifier;\n const exImport =\n imports.find((i) => i.local.node === exBindingIdentifier) ?? null;\n if (exImport) {\n importedFrom.push(exImport.source);\n }\n }\n\n if (ex.isIdentifier()) {\n findImportSourceOfIdentifier(ex);\n } else {\n ex.traverse({\n Identifier: findImportSourceOfIdentifier,\n });\n }\n\n // Replace the expression with the _expN() call\n mutate(ex, (p) => {\n p.replaceWith({\n type: 'CallExpression',\n callee: createId(expUid),\n arguments: [],\n });\n });\n\n // eslint-disable-next-line no-param-reassign\n ex.node.loc = loc;\n\n // noinspection UnnecessaryLocalVariableJS\n const result: Omit<\n LazyValue | FunctionValue,\n 'buildCodeFrameError' | 'source'\n > = {\n kind,\n ex: createId(expUid, loc),\n importedFrom,\n };\n\n return result;\n}\n\nconst debug = logger.extend('template-parse:identify-expressions');\n\n/**\n * Collects, hoists, and makes lazy all expressions in the given template\n * If evaluate is true, it will try to evaluate the expressions\n */\nexport function collectTemplateDependencies(\n path: NodePath<TaggedTemplateExpression>,\n evaluate = false\n): [quasis: TemplateElement[], expressionValues: ExpressionValue[]] {\n const quasi = path.get('quasi');\n const quasis = quasi.get('quasis');\n const expressions = quasi.get('expressions');\n\n debug('Found: %s', expressions.length);\n\n const expressionValues: ExpressionValue[] = expressions.map(\n (ex: NodePath<Expression | TSType>): ExpressionValue => {\n const buildCodeFrameError = ex.buildCodeFrameError.bind(ex);\n const source = getSource(ex);\n\n if (!ex.isExpression()) {\n throw buildCodeFrameError(\n `The expression '${source}' is not supported.`\n );\n }\n\n const extracted = extractExpression(ex, evaluate);\n\n return {\n ...extracted,\n source,\n buildCodeFrameError,\n } as ExpressionValue;\n }\n );\n\n return [quasis.map((p) => p.node), expressionValues];\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"collectTemplateDependencies.js","names":["_template","require","_types","_shared","_createId","_findIdentifiers","_getSource","_scopeHelpers","_valueToLiteral","staticEval","ex","evaluate","undefined","result","confident","hasEvalMeta","value","expressionDeclarationTpl","statement","preserveComments","unsupported","reason","buildCodeFrameError","isIdentifier","getUidInRootScope","path","name","node","rootScope","scope","getProgramParent","hasBinding","generateUid","hoistVariableDeclarator","parent","referencedIdentifiers","findIdentifiers","forEach","identifier","hoistIdentifier","bindingIdentifiers","newName","rename","statementInRoot","findParent","p","_p$parentPath","parentPath","isProgram","declaration","type","kind","declarations","cloneNode","inserted","insertBefore","referenceAll","registerDeclaration","idPath","isReferenced","binding","getBinding","includes","bindingPath","isVariableDeclarator","extractExpression","imports","isLiteral","ValueType","CONST","loc","_p$parentPath2","isFunction","isFunctionExpression","isArrowFunctionExpression","expUid","evaluated","id","evaluatedId","mutate","replaceWith","valueToLiteral","FUNCTION","LAZY","expId","createId","expression","importedFrom","findImportSourceOfIdentifier","_idPath$scope$getBind","_imports$find","exBindingIdentifier","exImport","find","i","local","push","source","traverse","Identifier","callee","arguments","debug","logger","extend","collectTemplateDependencies","quasi","get","quasis","expressions","length","expressionValues","map","bind","getSource","isExpression","extracted"],"sources":["../../src/utils/collectTemplateDependencies.ts"],"sourcesContent":["/* eslint @typescript-eslint/no-use-before-define: [\"error\", { \"functions\": false }] */\n\n/**\n * This file is a visitor that checks TaggedTemplateExpressions and look for WYW template literals.\n * For each template it makes a list of dependencies, try to evaluate expressions, and if it is not possible, mark them as lazy dependencies.\n */\n\nimport { statement } from '@babel/template';\nimport type { NodePath } from '@babel/traverse';\nimport type {\n Expression,\n Identifier,\n JSXIdentifier,\n Statement,\n TaggedTemplateExpression,\n TemplateElement,\n TSType,\n VariableDeclaration,\n VariableDeclarator,\n} from '@babel/types';\nimport { cloneNode } from '@babel/types';\n\nimport type {\n ConstValue,\n ExpressionValue,\n FunctionValue,\n LazyValue,\n} from '@wyw-in-js/shared';\nimport { hasEvalMeta, ValueType, logger } from '@wyw-in-js/shared';\n\nimport type { IImport } from './collectExportsAndImports';\nimport { createId } from './createId';\nimport { findIdentifiers } from './findIdentifiers';\nimport { getSource } from './getSource';\nimport { mutate, referenceAll } from './scopeHelpers';\nimport { valueToLiteral } from './valueToLiteral';\n\nfunction staticEval(\n ex: NodePath<Expression>,\n evaluate = false\n): [unknown] | undefined {\n if (!evaluate) return undefined;\n\n const result = ex.evaluate();\n if (result.confident && !hasEvalMeta(result.value)) {\n return [result.value];\n }\n\n return undefined;\n}\n\nconst expressionDeclarationTpl = statement(\n 'const %%expId%% = /*#__PURE__*/ () => %%expression%%',\n {\n preserveComments: true,\n }\n);\n\nconst unsupported = (ex: NodePath, reason?: string): Error =>\n ex.buildCodeFrameError(\n `This ${\n ex.isIdentifier() ? 'identifier' : 'expression'\n } cannot be used in the template${reason ? `, because it ${reason}` : ''}.`\n );\n\nfunction getUidInRootScope(path: NodePath<Identifier | JSXIdentifier>): string {\n const { name } = path.node;\n const rootScope = path.scope.getProgramParent();\n if (rootScope.hasBinding(name)) {\n return rootScope.generateUid(name);\n }\n\n return name;\n}\n\nfunction hoistVariableDeclarator(ex: NodePath<VariableDeclarator>) {\n if (!ex.scope.parent) {\n // It is already in the root scope\n return;\n }\n\n const referencedIdentifiers = findIdentifiers([ex], 'reference');\n referencedIdentifiers.forEach((identifier) => {\n if (identifier.isIdentifier()) {\n hoistIdentifier(identifier);\n }\n });\n\n const bindingIdentifiers = findIdentifiers([ex], 'declaration');\n\n bindingIdentifiers.forEach((path) => {\n const newName = getUidInRootScope(path);\n if (newName !== path.node.name) {\n path.scope.rename(path.node.name, newName);\n }\n });\n\n const rootScope = ex.scope.getProgramParent();\n\n const statementInRoot = ex.findParent(\n (p) => p.parentPath?.isProgram() === true\n ) as NodePath<Statement>;\n\n const declaration: VariableDeclaration = {\n type: 'VariableDeclaration',\n kind: 'let',\n declarations: [cloneNode(ex.node)],\n };\n\n const [inserted] = statementInRoot.insertBefore(declaration);\n referenceAll(inserted);\n rootScope.registerDeclaration(inserted);\n}\n\nfunction hoistIdentifier(idPath: NodePath<Identifier>): void {\n if (!idPath.isReferenced()) {\n throw unsupported(idPath);\n }\n\n const binding = idPath.scope.getBinding(idPath.node.name);\n if (!binding) {\n // It's something strange\n throw unsupported(idPath, 'is undefined');\n }\n\n if (binding.kind === 'module') {\n // Modules are global by default\n return;\n }\n\n if (!['var', 'let', 'const', 'hoisted'].includes(binding.kind)) {\n // This is not a variable, we can't hoist it\n throw unsupported(binding.path, 'is a function parameter');\n }\n\n const { scope, path: bindingPath } = binding;\n // parent here can be null or undefined in different versions of babel\n if (!scope.parent) {\n // The variable is already in the root scope\n return;\n }\n\n if (bindingPath.isVariableDeclarator()) {\n hoistVariableDeclarator(bindingPath);\n\n return;\n }\n\n throw unsupported(idPath);\n}\n\n/**\n * Only an expression that can be evaluated in the root scope can be\n * used in a WYW template. This function tries to hoist the expression.\n * @param ex The expression to hoist.\n * @param evaluate If true, we try to statically evaluate the expression.\n * @param imports All the imports of the file.\n */\nexport function extractExpression(\n ex: NodePath<Expression>,\n evaluate = false,\n imports: IImport[] = []\n): Omit<ExpressionValue, 'buildCodeFrameError' | 'source'> {\n if (\n ex.isLiteral() &&\n ('value' in ex.node || ex.node.type === 'NullLiteral')\n ) {\n return {\n ex: ex.node,\n kind: ValueType.CONST,\n value: ex.node.type === 'NullLiteral' ? null : ex.node.value,\n } as Omit<ConstValue, 'buildCodeFrameError' | 'source'>;\n }\n\n const { loc } = ex.node;\n\n const rootScope = ex.scope.getProgramParent();\n const statementInRoot = ex.findParent(\n (p) => p.parentPath?.isProgram() === true\n ) as NodePath<Statement>;\n\n const isFunction =\n ex.isFunctionExpression() || ex.isArrowFunctionExpression();\n\n // Generate next _expN name\n const expUid = rootScope.generateUid('exp');\n\n const evaluated = staticEval(ex, evaluate);\n\n if (!evaluated) {\n // If expression is not statically evaluable,\n // we need to hoist all its referenced identifiers\n\n // Collect all referenced identifiers\n findIdentifiers([ex], 'reference').forEach((id) => {\n if (!id.isIdentifier()) return;\n\n // Try to evaluate and inline them…\n const evaluatedId = staticEval(id, evaluate);\n if (evaluatedId) {\n mutate(id, (p) => {\n p.replaceWith(valueToLiteral(evaluatedId[0], ex));\n });\n } else {\n // … or hoist them to the root scope\n hoistIdentifier(id);\n }\n });\n }\n\n const kind = isFunction ? ValueType.FUNCTION : ValueType.LAZY;\n\n // Declare _expN const with the lazy expression\n const declaration = expressionDeclarationTpl({\n expId: createId(expUid),\n expression: evaluated\n ? valueToLiteral(evaluated[0], ex)\n : cloneNode(ex.node),\n }) as VariableDeclaration;\n\n // Insert the declaration as close as possible to the original expression\n const [inserted] = statementInRoot.insertBefore(declaration);\n referenceAll(inserted);\n rootScope.registerDeclaration(inserted);\n\n const importedFrom: string[] = [];\n function findImportSourceOfIdentifier(idPath: NodePath<Identifier>) {\n const exBindingIdentifier = idPath.scope.getBinding(idPath.node.name)\n ?.identifier;\n const exImport =\n imports.find((i) => i.local.node === exBindingIdentifier) ?? null;\n if (exImport) {\n importedFrom.push(exImport.source);\n }\n }\n\n if (ex.isIdentifier()) {\n findImportSourceOfIdentifier(ex);\n } else {\n ex.traverse({\n Identifier: findImportSourceOfIdentifier,\n });\n }\n\n // Replace the expression with the _expN() call\n mutate(ex, (p) => {\n p.replaceWith({\n type: 'CallExpression',\n callee: createId(expUid),\n arguments: [],\n });\n });\n\n // eslint-disable-next-line no-param-reassign\n ex.node.loc = loc;\n\n // noinspection UnnecessaryLocalVariableJS\n const result: Omit<\n LazyValue | FunctionValue,\n 'buildCodeFrameError' | 'source'\n > = {\n kind,\n ex: createId(expUid, loc),\n importedFrom,\n };\n\n return result;\n}\n\nconst debug = logger.extend('template-parse:identify-expressions');\n\n/**\n * Collects, hoists, and makes lazy all expressions in the given template\n * If evaluate is true, it will try to evaluate the expressions\n */\nexport function collectTemplateDependencies(\n path: NodePath<TaggedTemplateExpression>,\n evaluate = false\n): [quasis: TemplateElement[], expressionValues: ExpressionValue[]] {\n const quasi = path.get('quasi');\n const quasis = quasi.get('quasis');\n const expressions = quasi.get('expressions');\n\n debug('Found: %s', expressions.length);\n\n const expressionValues: ExpressionValue[] = expressions.map(\n (ex: NodePath<Expression | TSType>): ExpressionValue => {\n const buildCodeFrameError = ex.buildCodeFrameError.bind(ex);\n const source = getSource(ex);\n\n if (!ex.isExpression()) {\n throw buildCodeFrameError(\n `The expression '${source}' is not supported.`\n );\n }\n\n const extracted = extractExpression(ex, evaluate);\n\n return {\n ...extracted,\n source,\n buildCodeFrameError,\n } as ExpressionValue;\n }\n );\n\n return [quasis.map((p) => p.node), expressionValues];\n}\n"],"mappings":";;;;;;;AAOA,IAAAA,SAAA,GAAAC,OAAA;AAaA,IAAAC,MAAA,GAAAD,OAAA;AAQA,IAAAE,OAAA,GAAAF,OAAA;AAGA,IAAAG,SAAA,GAAAH,OAAA;AACA,IAAAI,gBAAA,GAAAJ,OAAA;AACA,IAAAK,UAAA,GAAAL,OAAA;AACA,IAAAM,aAAA,GAAAN,OAAA;AACA,IAAAO,eAAA,GAAAP,OAAA;AAnCA;;AAEA;AACA;AACA;AACA;;AAgCA,SAASQ,UAAUA,CACjBC,EAAwB,EACxBC,QAAQ,GAAG,KAAK,EACO;EACvB,IAAI,CAACA,QAAQ,EAAE,OAAOC,SAAS;EAE/B,MAAMC,MAAM,GAAGH,EAAE,CAACC,QAAQ,CAAC,CAAC;EAC5B,IAAIE,MAAM,CAACC,SAAS,IAAI,CAAC,IAAAC,mBAAW,EAACF,MAAM,CAACG,KAAK,CAAC,EAAE;IAClD,OAAO,CAACH,MAAM,CAACG,KAAK,CAAC;EACvB;EAEA,OAAOJ,SAAS;AAClB;AAEA,MAAMK,wBAAwB,GAAG,IAAAC,mBAAS,EACxC,sDAAsD,EACtD;EACEC,gBAAgB,EAAE;AACpB,CACF,CAAC;AAED,MAAMC,WAAW,GAAGA,CAACV,EAAY,EAAEW,MAAe,KAChDX,EAAE,CAACY,mBAAmB,CACnB,QACCZ,EAAE,CAACa,YAAY,CAAC,CAAC,GAAG,YAAY,GAAG,YACpC,kCAAiCF,MAAM,GAAI,gBAAeA,MAAO,EAAC,GAAG,EAAG,GAC3E,CAAC;AAEH,SAASG,iBAAiBA,CAACC,IAA0C,EAAU;EAC7E,MAAM;IAAEC;EAAK,CAAC,GAAGD,IAAI,CAACE,IAAI;EAC1B,MAAMC,SAAS,GAAGH,IAAI,CAACI,KAAK,CAACC,gBAAgB,CAAC,CAAC;EAC/C,IAAIF,SAAS,CAACG,UAAU,CAACL,IAAI,CAAC,EAAE;IAC9B,OAAOE,SAAS,CAACI,WAAW,CAACN,IAAI,CAAC;EACpC;EAEA,OAAOA,IAAI;AACb;AAEA,SAASO,uBAAuBA,CAACvB,EAAgC,EAAE;EACjE,IAAI,CAACA,EAAE,CAACmB,KAAK,CAACK,MAAM,EAAE;IACpB;IACA;EACF;EAEA,MAAMC,qBAAqB,GAAG,IAAAC,gCAAe,EAAC,CAAC1B,EAAE,CAAC,EAAE,WAAW,CAAC;EAChEyB,qBAAqB,CAACE,OAAO,CAAEC,UAAU,IAAK;IAC5C,IAAIA,UAAU,CAACf,YAAY,CAAC,CAAC,EAAE;MAC7BgB,eAAe,CAACD,UAAU,CAAC;IAC7B;EACF,CAAC,CAAC;EAEF,MAAME,kBAAkB,GAAG,IAAAJ,gCAAe,EAAC,CAAC1B,EAAE,CAAC,EAAE,aAAa,CAAC;EAE/D8B,kBAAkB,CAACH,OAAO,CAAEZ,IAAI,IAAK;IACnC,MAAMgB,OAAO,GAAGjB,iBAAiB,CAACC,IAAI,CAAC;IACvC,IAAIgB,OAAO,KAAKhB,IAAI,CAACE,IAAI,CAACD,IAAI,EAAE;MAC9BD,IAAI,CAACI,KAAK,CAACa,MAAM,CAACjB,IAAI,CAACE,IAAI,CAACD,IAAI,EAAEe,OAAO,CAAC;IAC5C;EACF,CAAC,CAAC;EAEF,MAAMb,SAAS,GAAGlB,EAAE,CAACmB,KAAK,CAACC,gBAAgB,CAAC,CAAC;EAE7C,MAAMa,eAAe,GAAGjC,EAAE,CAACkC,UAAU,CAClCC,CAAC;IAAA,IAAAC,aAAA;IAAA,OAAK,EAAAA,aAAA,GAAAD,CAAC,CAACE,UAAU,cAAAD,aAAA,uBAAZA,aAAA,CAAcE,SAAS,CAAC,CAAC,MAAK,IAAI;EAAA,CAC3C,CAAwB;EAExB,MAAMC,WAAgC,GAAG;IACvCC,IAAI,EAAE,qBAAqB;IAC3BC,IAAI,EAAE,KAAK;IACXC,YAAY,EAAE,CAAC,IAAAC,gBAAS,EAAC3C,EAAE,CAACiB,IAAI,CAAC;EACnC,CAAC;EAED,MAAM,CAAC2B,QAAQ,CAAC,GAAGX,eAAe,CAACY,YAAY,CAACN,WAAW,CAAC;EAC5D,IAAAO,0BAAY,EAACF,QAAQ,CAAC;EACtB1B,SAAS,CAAC6B,mBAAmB,CAACH,QAAQ,CAAC;AACzC;AAEA,SAASf,eAAeA,CAACmB,MAA4B,EAAQ;EAC3D,IAAI,CAACA,MAAM,CAACC,YAAY,CAAC,CAAC,EAAE;IAC1B,MAAMvC,WAAW,CAACsC,MAAM,CAAC;EAC3B;EAEA,MAAME,OAAO,GAAGF,MAAM,CAAC7B,KAAK,CAACgC,UAAU,CAACH,MAAM,CAAC/B,IAAI,CAACD,IAAI,CAAC;EACzD,IAAI,CAACkC,OAAO,EAAE;IACZ;IACA,MAAMxC,WAAW,CAACsC,MAAM,EAAE,cAAc,CAAC;EAC3C;EAEA,IAAIE,OAAO,CAACT,IAAI,KAAK,QAAQ,EAAE;IAC7B;IACA;EACF;EAEA,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,CAACW,QAAQ,CAACF,OAAO,CAACT,IAAI,CAAC,EAAE;IAC9D;IACA,MAAM/B,WAAW,CAACwC,OAAO,CAACnC,IAAI,EAAE,yBAAyB,CAAC;EAC5D;EAEA,MAAM;IAAEI,KAAK;IAAEJ,IAAI,EAAEsC;EAAY,CAAC,GAAGH,OAAO;EAC5C;EACA,IAAI,CAAC/B,KAAK,CAACK,MAAM,EAAE;IACjB;IACA;EACF;EAEA,IAAI6B,WAAW,CAACC,oBAAoB,CAAC,CAAC,EAAE;IACtC/B,uBAAuB,CAAC8B,WAAW,CAAC;IAEpC;EACF;EAEA,MAAM3C,WAAW,CAACsC,MAAM,CAAC;AAC3B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASO,iBAAiBA,CAC/BvD,EAAwB,EACxBC,QAAQ,GAAG,KAAK,EAChBuD,OAAkB,GAAG,EAAE,EACkC;EACzD,IACExD,EAAE,CAACyD,SAAS,CAAC,CAAC,KACb,OAAO,IAAIzD,EAAE,CAACiB,IAAI,IAAIjB,EAAE,CAACiB,IAAI,CAACuB,IAAI,KAAK,aAAa,CAAC,EACtD;IACA,OAAO;MACLxC,EAAE,EAAEA,EAAE,CAACiB,IAAI;MACXwB,IAAI,EAAEiB,iBAAS,CAACC,KAAK;MACrBrD,KAAK,EAAEN,EAAE,CAACiB,IAAI,CAACuB,IAAI,KAAK,aAAa,GAAG,IAAI,GAAGxC,EAAE,CAACiB,IAAI,CAACX;IACzD,CAAC;EACH;EAEA,MAAM;IAAEsD;EAAI,CAAC,GAAG5D,EAAE,CAACiB,IAAI;EAEvB,MAAMC,SAAS,GAAGlB,EAAE,CAACmB,KAAK,CAACC,gBAAgB,CAAC,CAAC;EAC7C,MAAMa,eAAe,GAAGjC,EAAE,CAACkC,UAAU,CAClCC,CAAC;IAAA,IAAA0B,cAAA;IAAA,OAAK,EAAAA,cAAA,GAAA1B,CAAC,CAACE,UAAU,cAAAwB,cAAA,uBAAZA,cAAA,CAAcvB,SAAS,CAAC,CAAC,MAAK,IAAI;EAAA,CAC3C,CAAwB;EAExB,MAAMwB,UAAU,GACd9D,EAAE,CAAC+D,oBAAoB,CAAC,CAAC,IAAI/D,EAAE,CAACgE,yBAAyB,CAAC,CAAC;;EAE7D;EACA,MAAMC,MAAM,GAAG/C,SAAS,CAACI,WAAW,CAAC,KAAK,CAAC;EAE3C,MAAM4C,SAAS,GAAGnE,UAAU,CAACC,EAAE,EAAEC,QAAQ,CAAC;EAE1C,IAAI,CAACiE,SAAS,EAAE;IACd;IACA;;IAEA;IACA,IAAAxC,gCAAe,EAAC,CAAC1B,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC2B,OAAO,CAAEwC,EAAE,IAAK;MACjD,IAAI,CAACA,EAAE,CAACtD,YAAY,CAAC,CAAC,EAAE;;MAExB;MACA,MAAMuD,WAAW,GAAGrE,UAAU,CAACoE,EAAE,EAAElE,QAAQ,CAAC;MAC5C,IAAImE,WAAW,EAAE;QACf,IAAAC,oBAAM,EAACF,EAAE,EAAGhC,CAAC,IAAK;UAChBA,CAAC,CAACmC,WAAW,CAAC,IAAAC,8BAAc,EAACH,WAAW,CAAC,CAAC,CAAC,EAAEpE,EAAE,CAAC,CAAC;QACnD,CAAC,CAAC;MACJ,CAAC,MAAM;QACL;QACA6B,eAAe,CAACsC,EAAE,CAAC;MACrB;IACF,CAAC,CAAC;EACJ;EAEA,MAAM1B,IAAI,GAAGqB,UAAU,GAAGJ,iBAAS,CAACc,QAAQ,GAAGd,iBAAS,CAACe,IAAI;;EAE7D;EACA,MAAMlC,WAAW,GAAGhC,wBAAwB,CAAC;IAC3CmE,KAAK,EAAE,IAAAC,kBAAQ,EAACV,MAAM,CAAC;IACvBW,UAAU,EAAEV,SAAS,GACjB,IAAAK,8BAAc,EAACL,SAAS,CAAC,CAAC,CAAC,EAAElE,EAAE,CAAC,GAChC,IAAA2C,gBAAS,EAAC3C,EAAE,CAACiB,IAAI;EACvB,CAAC,CAAwB;;EAEzB;EACA,MAAM,CAAC2B,QAAQ,CAAC,GAAGX,eAAe,CAACY,YAAY,CAACN,WAAW,CAAC;EAC5D,IAAAO,0BAAY,EAACF,QAAQ,CAAC;EACtB1B,SAAS,CAAC6B,mBAAmB,CAACH,QAAQ,CAAC;EAEvC,MAAMiC,YAAsB,GAAG,EAAE;EACjC,SAASC,4BAA4BA,CAAC9B,MAA4B,EAAE;IAAA,IAAA+B,qBAAA,EAAAC,aAAA;IAClE,MAAMC,mBAAmB,IAAAF,qBAAA,GAAG/B,MAAM,CAAC7B,KAAK,CAACgC,UAAU,CAACH,MAAM,CAAC/B,IAAI,CAACD,IAAI,CAAC,cAAA+D,qBAAA,uBAAzCA,qBAAA,CACxBnD,UAAU;IACd,MAAMsD,QAAQ,IAAAF,aAAA,GACZxB,OAAO,CAAC2B,IAAI,CAAEC,CAAC,IAAKA,CAAC,CAACC,KAAK,CAACpE,IAAI,KAAKgE,mBAAmB,CAAC,cAAAD,aAAA,cAAAA,aAAA,GAAI,IAAI;IACnE,IAAIE,QAAQ,EAAE;MACZL,YAAY,CAACS,IAAI,CAACJ,QAAQ,CAACK,MAAM,CAAC;IACpC;EACF;EAEA,IAAIvF,EAAE,CAACa,YAAY,CAAC,CAAC,EAAE;IACrBiE,4BAA4B,CAAC9E,EAAE,CAAC;EAClC,CAAC,MAAM;IACLA,EAAE,CAACwF,QAAQ,CAAC;MACVC,UAAU,EAAEX;IACd,CAAC,CAAC;EACJ;;EAEA;EACA,IAAAT,oBAAM,EAACrE,EAAE,EAAGmC,CAAC,IAAK;IAChBA,CAAC,CAACmC,WAAW,CAAC;MACZ9B,IAAI,EAAE,gBAAgB;MACtBkD,MAAM,EAAE,IAAAf,kBAAQ,EAACV,MAAM,CAAC;MACxB0B,SAAS,EAAE;IACb,CAAC,CAAC;EACJ,CAAC,CAAC;;EAEF;EACA3F,EAAE,CAACiB,IAAI,CAAC2C,GAAG,GAAGA,GAAG;;EAEjB;EACA,MAAMzD,MAGL,GAAG;IACFsC,IAAI;IACJzC,EAAE,EAAE,IAAA2E,kBAAQ,EAACV,MAAM,EAAEL,GAAG,CAAC;IACzBiB;EACF,CAAC;EAED,OAAO1E,MAAM;AACf;AAEA,MAAMyF,KAAK,GAAGC,cAAM,CAACC,MAAM,CAAC,qCAAqC,CAAC;;AAElE;AACA;AACA;AACA;AACO,SAASC,2BAA2BA,CACzChF,IAAwC,EACxCd,QAAQ,GAAG,KAAK,EACkD;EAClE,MAAM+F,KAAK,GAAGjF,IAAI,CAACkF,GAAG,CAAC,OAAO,CAAC;EAC/B,MAAMC,MAAM,GAAGF,KAAK,CAACC,GAAG,CAAC,QAAQ,CAAC;EAClC,MAAME,WAAW,GAAGH,KAAK,CAACC,GAAG,CAAC,aAAa,CAAC;EAE5CL,KAAK,CAAC,WAAW,EAAEO,WAAW,CAACC,MAAM,CAAC;EAEtC,MAAMC,gBAAmC,GAAGF,WAAW,CAACG,GAAG,CACxDtG,EAAiC,IAAsB;IACtD,MAAMY,mBAAmB,GAAGZ,EAAE,CAACY,mBAAmB,CAAC2F,IAAI,CAACvG,EAAE,CAAC;IAC3D,MAAMuF,MAAM,GAAG,IAAAiB,oBAAS,EAACxG,EAAE,CAAC;IAE5B,IAAI,CAACA,EAAE,CAACyG,YAAY,CAAC,CAAC,EAAE;MACtB,MAAM7F,mBAAmB,CACtB,mBAAkB2E,MAAO,qBAC5B,CAAC;IACH;IAEA,MAAMmB,SAAS,GAAGnD,iBAAiB,CAACvD,EAAE,EAAEC,QAAQ,CAAC;IAEjD,OAAO;MACL,GAAGyG,SAAS;MACZnB,MAAM;MACN3E;IACF,CAAC;EACH,CACF,CAAC;EAED,OAAO,CAACsF,MAAM,CAACI,GAAG,CAAEnE,CAAC,IAAKA,CAAC,CAAClB,IAAI,CAAC,EAAEoF,gBAAgB,CAAC;AACtD"}
|
|
@@ -9,9 +9,9 @@ var _path = require("path");
|
|
|
9
9
|
var _core = require("@babel/core");
|
|
10
10
|
var _helperModuleImports = require("@babel/helper-module-imports");
|
|
11
11
|
var _processorUtils = require("@wyw-in-js/processor-utils");
|
|
12
|
+
var _shared = require("@wyw-in-js/shared");
|
|
12
13
|
var _collectExportsAndImports = require("./collectExportsAndImports");
|
|
13
14
|
var _collectTemplateDependencies = require("./collectTemplateDependencies");
|
|
14
|
-
var _findPackageJSON = require("./findPackageJSON");
|
|
15
15
|
var _getSource = require("./getSource");
|
|
16
16
|
var _isNotNull = require("./isNotNull");
|
|
17
17
|
var _scopeHelpers = require("./scopeHelpers");
|
|
@@ -38,7 +38,7 @@ const getDefinedTagsFromPackage = (pkgName, filename) => {
|
|
|
38
38
|
if (definedTagsCache.has(pkgName)) {
|
|
39
39
|
return definedTagsCache.get(pkgName);
|
|
40
40
|
}
|
|
41
|
-
const packageJSONPath = (0,
|
|
41
|
+
const packageJSONPath = (0, _shared.findPackageJSON)(pkgName, filename);
|
|
42
42
|
if (!packageJSONPath) {
|
|
43
43
|
return undefined;
|
|
44
44
|
}
|