@wyw-in-js/transform 0.2.1 → 0.2.2
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/plugins/shaker.js +20 -8
- package/esm/plugins/shaker.js.map +1 -1
- package/esm/shaker.js +1 -1
- package/esm/shaker.js.map +1 -1
- package/esm/transform/generators/extract.js +4 -3
- package/esm/transform/generators/extract.js.map +1 -1
- package/esm/transform/generators/transform.js +1 -0
- package/esm/transform/generators/transform.js.map +1 -1
- package/esm/transform/helpers/loadWywOptions.js +1 -1
- package/esm/transform/helpers/loadWywOptions.js.map +1 -1
- package/esm/utils/collectExportsAndImports.js +14 -10
- package/esm/utils/collectExportsAndImports.js.map +1 -1
- package/esm/utils/scopeHelpers.js +13 -0
- package/esm/utils/scopeHelpers.js.map +1 -1
- package/lib/plugins/shaker.js +21 -9
- package/lib/plugins/shaker.js.map +1 -1
- package/lib/shaker.js +2 -1
- package/lib/shaker.js.map +1 -1
- package/lib/transform/generators/extract.js +3 -2
- package/lib/transform/generators/extract.js.map +1 -1
- package/lib/transform/generators/transform.js +1 -0
- package/lib/transform/generators/transform.js.map +1 -1
- package/lib/transform/helpers/loadWywOptions.js +3 -4
- package/lib/transform/helpers/loadWywOptions.js.map +1 -1
- package/lib/utils/collectExportsAndImports.js +14 -10
- package/lib/utils/collectExportsAndImports.js.map +1 -1
- package/lib/utils/scopeHelpers.js +13 -0
- package/lib/utils/scopeHelpers.js.map +1 -1
- package/package.json +7 -7
- package/types/plugins/shaker.js +23 -9
- package/types/shaker.d.ts +1 -1
- package/types/shaker.js +3 -1
- package/types/transform/generators/extract.js +2 -2
- package/types/transform/generators/transform.js +1 -0
- package/types/transform/helpers/loadWywOptions.js +3 -6
- package/types/utils/collectExportsAndImports.js +14 -10
- package/types/utils/scopeHelpers.js +13 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collectExportsAndImports.js","names":["logger","getScope","isExports","isNotNull","isRequire","isTypedNode","getTraversalCache","sideEffectImport","item","imported","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","map","key","isIdentifier","reverse","what","as","isRestElement","argument","debug","extend","importFromVariableDeclarator","isSync","id","isObjectPattern","findIIFE","isCallExpression","isFunctionExpression","exportFromVariableDeclarator","init","binding","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","isEmptyObject","isArrayExpression","isAlreadyProcessed","isRequireCall","isObjectExpression","properties","pathOrName","collectFromRequire","processedRequires","has","add","reexports","exported","variableDeclarator","unfolded","isExpressionStatement","collectFromVariableDeclarator","found","identifierPath","skip","isChainOfVoidAssignment","right","isUnaryExpression","operator","isAssignmentExpression","getReturnValue","params","body","returnStatement","isReturnStatement","getGetterValueFromDescriptor","descriptor","props","getter","isArrowFunctionExpression","valueProp","valueValue","addExport","getRelatedImport","object","objectBinding","scope","isAncestor","computed","import","relatedImport","exports","collectFromExports","memberExpression","exportName","saveRef","exportRefs","set","assignmentExpression","left","isEsModule","matchesPattern","obj","collectFromRequireOrExports","importItem","referenced","referencePath","ancestor","isTSType","isFlowType","listKey","importType","isExportSpecifier","isExportDefaultDeclaration","collectFromExportAllDeclaration","collectFromExportSpecifier","isExportDefaultSpecifier","isExportNamespaceSpecifier","collectFromExportNamedDeclaration","declaration","isVariableDeclaration","declarator","isTSEnumDeclaration","isFunctionDeclaration","isClassDeclaration","collectFromExportDefaultDeclaration","default","collectFromAssignmentExpression","imp","collectAllFromCall","require","requireCall","collectFromMap","isFunction","returnValue","collectMapFromCall","mapPosition","collectFromEsbuildReExportCall","sourceExports","someCall","firstArg","collectFromCallExpression","maybeExportStart","secondArg","collectExportsAndImports","cacheMode","localState","deadExports","Map","sourceType","WeakSet","cache","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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"}
|
|
1
|
+
{"version":3,"file":"collectExportsAndImports.js","names":["logger","getScope","isExports","isNotNull","isRequire","isTypedNode","getTraversalCache","sideEffectImport","item","imported","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","map","key","isIdentifier","reverse","what","as","isRestElement","argument","debug","extend","importFromVariableDeclarator","isSync","id","isObjectPattern","findIIFE","isCallExpression","isFunctionExpression","exportFromVariableDeclarator","init","binding","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","isEmptyObject","isArrayExpression","isAlreadyProcessed","isRequireCall","isObjectExpression","properties","pathOrName","collectFromRequire","processedRequires","has","add","reexports","exported","variableDeclarator","unfolded","isExpressionStatement","collectFromVariableDeclarator","found","identifierPath","skip","isChainOfVoidAssignment","right","isUnaryExpression","operator","isAssignmentExpression","getReturnValue","params","body","returnStatement","isReturnStatement","getGetterValueFromDescriptor","descriptor","props","getter","isArrowFunctionExpression","valueProp","valueValue","addExport","getRelatedImport","object","objectBinding","scope","isAncestor","computed","import","relatedImport","exports","saveRef","exportName","memberExpression","exportRefs","set","collectFromExports","assignmentExpression","left","isEsModule","matchesPattern","obj","collectFromRequireOrExports","importItem","referenced","referencePath","ancestor","isTSType","isFlowType","listKey","importType","isExportSpecifier","isExportDefaultDeclaration","collectFromExportAllDeclaration","collectFromExportSpecifier","isExportDefaultSpecifier","isExportNamespaceSpecifier","collectFromExportNamedDeclaration","declaration","isVariableDeclaration","declarator","isTSEnumDeclaration","isFunctionDeclaration","isClassDeclaration","collectFromExportDefaultDeclaration","default","collectFromAssignmentExpression","isExportRef","imp","collectAllFromCall","require","requireCall","collectFromMap","isFunction","returnValue","collectMapFromCall","mapPosition","collectFromEsbuildReExportCall","sourceExports","someCall","firstArg","collectFromCallExpression","maybeExportStart","secondArg","collectExportsAndImports","cacheMode","localState","deadExports","Map","sourceType","WeakSet","cache","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\nconst saveRef = (\n state: ILocalState,\n exportName: string,\n memberExpression: NodePath<MemberExpression>\n) => {\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\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 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(state, exportName, memberExpression);\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(state, exportName, memberExpression);\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 const isExportRef =\n left.isMemberExpression() && isExports(left.get('object'));\n if (isExportRef) {\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 if (isExportRef) {\n saveRef(state, exported, left);\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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"}
|
|
@@ -242,6 +242,10 @@ export function findActionForNode(path) {
|
|
|
242
242
|
}];
|
|
243
243
|
}
|
|
244
244
|
if (parent.isAssignmentExpression()) {
|
|
245
|
+
if (path.isAssignmentExpression()) {
|
|
246
|
+
// `foo = bar = 42` should be replaced with `foo = 42`
|
|
247
|
+
return ['replace', path, path.node.right];
|
|
248
|
+
}
|
|
245
249
|
return findActionForNode(parent);
|
|
246
250
|
}
|
|
247
251
|
if (parent.isCallExpression()) {
|
|
@@ -278,6 +282,15 @@ export function findActionForNode(path) {
|
|
|
278
282
|
}
|
|
279
283
|
}
|
|
280
284
|
if (parent.isVariableDeclarator()) {
|
|
285
|
+
if (path.key === 'init' && path.isAssignmentExpression()) {
|
|
286
|
+
// We are removing `bar` in `var foo = bar = 42`. Path should be replaced with `var foo = 42`
|
|
287
|
+
return ['replace', path, path.node.right];
|
|
288
|
+
}
|
|
289
|
+
const init = parent.get('init');
|
|
290
|
+
if (path.key === 'id' && init.isAssignmentExpression()) {
|
|
291
|
+
// We are removing `foo` in `var foo = bar = 42`. Ignore it.
|
|
292
|
+
return null;
|
|
293
|
+
}
|
|
281
294
|
return findActionForNode(parent);
|
|
282
295
|
}
|
|
283
296
|
if (parent.isExportNamedDeclaration() && (path.key === 'specifiers' && isEmptyList(parent.get('specifiers')) || path.key === 'declaration' && parent.node.declaration === path.node)) {
|