Big News: Socket Selected for OpenAI's Cybersecurity Grant Program.Details
Socket
Book a DemoSign in
Socket

@linaria/utils

Package Overview
Dependencies
Maintainers
4
Versions
29
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@linaria/utils - npm Package Compare versions

Comparing version
4.2.1
to
4.2.2
+6
esm/getScope.js
export function getScope(path) {
// In some nodes (like FunctionDeclaration) `scope` for `id` returns
// local function scope instead of a scope where function is declared.
return path.key === 'id' && path.parent === path.scope.block ? path.scope.parent : path.scope;
}
//# sourceMappingURL=getScope.js.map
{"version":3,"file":"getScope.js","names":["getScope","path","key","parent","scope","block"],"sources":["../src/getScope.ts"],"sourcesContent":["import type { NodePath } from '@babel/traverse';\n\nexport function getScope(path: NodePath) {\n // In some nodes (like FunctionDeclaration) `scope` for `id` returns\n // local function scope instead of a scope where function is declared.\n return path.key === 'id' && path.parent === path.scope.block\n ? path.scope.parent\n : path.scope;\n}\n"],"mappings":"AAEA,OAAO,SAASA,QAAT,CAAkBC,IAAlB,EAAkC;EACvC;EACA;EACA,OAAOA,IAAI,CAACC,GAAL,KAAa,IAAb,IAAqBD,IAAI,CAACE,MAAL,KAAgBF,IAAI,CAACG,KAAL,CAAWC,KAAhD,GACHJ,IAAI,CAACG,KAAL,CAAWD,MADR,GAEHF,IAAI,CAACG,KAFT;AAGD"}
export {};
//# sourceMappingURL=IVariableContext.js.map
{"version":3,"file":"IVariableContext.js","names":[],"sources":["../src/IVariableContext.ts"],"sourcesContent":["export interface IVariableContext {\n componentName: string;\n componentSlug: string;\n precedingCss: string;\n index: number;\n processor: string;\n source: string;\n unit: string;\n valueSlug: string;\n}\n"],"mappings":""}
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.getScope = getScope;
function getScope(path) {
// In some nodes (like FunctionDeclaration) `scope` for `id` returns
// local function scope instead of a scope where function is declared.
return path.key === 'id' && path.parent === path.scope.block ? path.scope.parent : path.scope;
}
//# sourceMappingURL=getScope.js.map
{"version":3,"file":"getScope.js","names":["getScope","path","key","parent","scope","block"],"sources":["../src/getScope.ts"],"sourcesContent":["import type { NodePath } from '@babel/traverse';\n\nexport function getScope(path: NodePath) {\n // In some nodes (like FunctionDeclaration) `scope` for `id` returns\n // local function scope instead of a scope where function is declared.\n return path.key === 'id' && path.parent === path.scope.block\n ? path.scope.parent\n : path.scope;\n}\n"],"mappings":";;;;;;;AAEO,SAASA,QAAT,CAAkBC,IAAlB,EAAkC;EACvC;EACA;EACA,OAAOA,IAAI,CAACC,GAAL,KAAa,IAAb,IAAqBD,IAAI,CAACE,MAAL,KAAgBF,IAAI,CAACG,KAAL,CAAWC,KAAhD,GACHJ,IAAI,CAACG,KAAL,CAAWD,MADR,GAEHF,IAAI,CAACG,KAFT;AAGD"}
"use strict";
//# sourceMappingURL=IVariableContext.js.map
{"version":3,"file":"IVariableContext.js","names":[],"sources":["../src/IVariableContext.ts"],"sourcesContent":["export interface IVariableContext {\n componentName: string;\n componentSlug: string;\n precedingCss: string;\n index: number;\n processor: string;\n source: string;\n unit: string;\n valueSlug: string;\n}\n"],"mappings":""}
import type { NodePath } from '@babel/traverse';
export declare function getScope(path: NodePath): import("@babel/traverse").Scope;
export interface IVariableContext {
componentName: string;
componentSlug: string;
precedingCss: string;
index: number;
processor: string;
source: string;
unit: string;
valueSlug: string;
}
+2
-1

@@ -5,2 +5,3 @@ /* eslint @typescript-eslint/no-use-before-define: ["error", { "functions": false }] */

import { warn } from '@linaria/logger';
import { getScope } from './getScope';
import isExports from './isExports';

@@ -550,3 +551,3 @@ import isNotNull from './isNotNull';

const binding = local.scope.getBinding(local.node.name);
const binding = getScope(local).getBinding(local.node.name);

@@ -553,0 +554,0 @@ if (!binding?.referenced) {

@@ -1,1 +0,1 @@

{"version":3,"file":"collectExportsAndImports.js","names":["warn","isExports","isNotNull","isRequire","isTypedNode","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","importFromVariableDeclarator","isSync","id","isObjectPattern","exportFromVariableDeclarator","init","isExpression","exported","destructed","collectFromDynamicImport","callExpression","isCallExpression","sourcePath","isStringLiteral","container","isAwaited","isAwaitExpression","isVariableDeclarator","prop","getImportTypeByInteropFunction","callee","undefined","startsWith","collectFromRequire","variableDeclarator","unfolded","isMemberExpression","property","isExpressionStatement","isChainOfVoidAssignment","right","isUnaryExpression","operator","isAssignmentExpression","getGetterValueFromDescriptor","descriptor","getter","find","isFunctionExpression","returnStatement","isReturnStatement","collectFromExports","object","memberExpression","exportName","saveRef","exportRefs","has","set","assignmentExpression","left","exports","matchesPattern","obj","isObjectExpression","collectFromRequireOrExports","importItem","binding","scope","getBinding","referenced","referencePath","referencePaths","ancestor","isTSType","isFlowType","computed","isExportSpecifier","collectFromExportAllDeclaration","reexports","collectFromExportSpecifier","isExportDefaultSpecifier","isExportNamespaceSpecifier","collectFromExportNamedDeclaration","declaration","isVariableDeclaration","declarator","isFunctionDeclaration","collectFromExportDefaultDeclaration","cache","WeakMap","collectFromAssignmentExpression","skip","collectFromCallExpression","maybeExportStart","requireCall","collectExportsAndImports","force","Map","AssignmentExpression","CallExpression","ExportAllDeclaration","ExportDefaultDeclaration","ExportNamedDeclaration","ImportDeclaration","Import"],"sources":["../src/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 CallExpression,\n ExportDefaultDeclaration,\n ExportNamedDeclaration,\n ExportSpecifier,\n Identifier,\n Import,\n ImportDeclaration,\n ImportDefaultSpecifier,\n ImportNamespaceSpecifier,\n ImportSpecifier,\n MemberExpression,\n ObjectPattern,\n StringLiteral,\n VariableDeclarator,\n ExportDefaultSpecifier,\n ExportNamespaceSpecifier,\n AssignmentExpression,\n ExportAllDeclaration,\n ObjectExpression,\n Expression,\n} from '@babel/types';\n\nimport { warn } from '@linaria/logger';\n\nimport isExports from './isExports';\nimport isNotNull from './isNotNull';\nimport isRequire from './isRequire';\nimport isTypedNode from './isTypedNode';\n\nexport interface ISideEffectImport {\n imported: null;\n local: NodePath;\n source: string;\n}\n\nexport interface IImport {\n imported: string | 'default' | '*';\n local: NodePath<Identifier | MemberExpression>;\n source: string;\n}\n\nexport interface IExport {\n exported: string | 'default' | '*'; // '*' means re-export all\n local: NodePath;\n}\n\nexport interface IReexport {\n exported: string | 'default' | '*';\n imported: string | 'default' | '*';\n local: NodePath;\n source: string;\n}\n\nexport interface IState {\n exportRefs: Map<string, NodePath<MemberExpression>[]>;\n exports: IExport[];\n imports: (IImport | ISideEffectImport)[];\n reexports: IReexport[];\n}\n\nexport const sideEffectImport = (\n item: IImport | ISideEffectImport\n): item is ISideEffectImport => item.imported === null;\n\nexport const explicitImport = (\n item: IImport | ISideEffectImport\n): item is IImport => item.imported !== null;\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 }];\n },\n\n ImportDefaultSpecifier(\n path: NodePath<ImportDefaultSpecifier>,\n source\n ): IImport[] {\n const local = path.get('local');\n return [{ imported: 'default', local, source }];\n },\n\n ImportNamespaceSpecifier(\n path: NodePath<ImportNamespaceSpecifier>,\n source\n ): IImport[] {\n const local = path.get('local');\n return unfoldNamespaceImport({ imported: '*', local, source });\n },\n};\n\nfunction collectFromImportDeclaration(\n path: NodePath<ImportDeclaration>,\n state: IState\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: null, 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 what: string | '*';\n as: NodePath<Identifier>;\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\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 warn('evaluator:collectExportsAndImports', '`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 warn(\n 'evaluator:collectExportsAndImports:importFromVariableDeclarator',\n 'Unknown type of id',\n id.node.type\n );\n\n return [];\n}\n\nfunction exportFromVariableDeclarator(\n path: NodePath<VariableDeclarator>\n): IExport[] {\n const id = path.get('id');\n const init = path.get('init');\n\n // If there is no init expression, we can ignore this export\n if (!init || !init.isExpression()) return [];\n\n if (id.isIdentifier()) {\n // It is `export const a = 1;`\n return [\n {\n local: init,\n exported: id.node.name,\n },\n ];\n }\n\n if (id.isObjectPattern()) {\n // It is `export const { a, ...rest } = obj;`\n return whatIsDestructed(id).map((destructed) => ({\n local: init,\n exported: destructed.as.node.name,\n }));\n }\n\n // What else it can be?\n warn(\n 'evaluator:collectExportsAndImports:exportFromVariableDeclarator',\n 'Unknown type of id',\n id.node.type\n );\n\n return [];\n}\n\nfunction collectFromDynamicImport(path: NodePath<Import>, state: IState): 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({ imported: prop.what, local: prop.as, source })\n );\n }\n}\n\nfunction getImportTypeByInteropFunction(\n path: NodePath<CallExpression>\n): '*' | 'default' | undefined {\n const callee = path.get('callee');\n if (!callee.isIdentifier()) {\n return undefined;\n }\n\n const { name } = callee.node;\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 ) {\n return '*';\n }\n\n if (name.startsWith('__rest')) {\n return '*';\n }\n\n return undefined;\n}\n\nfunction collectFromRequire(path: NodePath<Identifier>, state: IState): void {\n if (!isRequire(path)) return;\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 = getImportTypeByInteropFunction(container);\n if (!imported) {\n // It's not a transpiled import.\n // TODO: Can we guess that it's a namespace import?\n warn(\n 'evaluator:collectExportsAndImports',\n 'Unknown wrapper of require',\n container.node.callee\n );\n return;\n }\n\n const { parentPath: variableDeclarator } = container;\n if (!variableDeclarator.isVariableDeclarator()) {\n // TODO: Where else it can be?\n warn(\n 'evaluator:collectExportsAndImports',\n 'Unexpected require inside',\n variableDeclarator.node.type\n );\n return;\n }\n\n const id = variableDeclarator.get('id');\n if (!id.isIdentifier()) {\n warn(\n 'evaluator:collectExportsAndImports',\n 'Id should be Identifier',\n variableDeclarator.node.type\n );\n return;\n }\n\n if (imported === '*') {\n const unfolded = unfoldNamespaceImport({\n imported,\n local: id,\n source,\n });\n state.imports.push(...unfolded);\n } else {\n state.imports.push({\n imported,\n local: id,\n source,\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 warn(\n 'evaluator:collectExportsAndImports',\n 'Property should be Identifier or StringLiteral',\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 });\n } else {\n warn(\n 'evaluator:collectExportsAndImports',\n 'Id should be Identifier',\n variableDeclarator.node.type\n );\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 });\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 });\n\n state.imports.push(...unfolded);\n } else {\n state.imports.push({\n imported: prop.what,\n local: prop.as,\n source,\n });\n }\n });\n }\n\n if (container.isExpressionStatement()) {\n // Looks like standalone require\n state.imports.push({\n imported: null,\n local: container,\n source,\n });\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 getGetterValueFromDescriptor(\n descriptor: NodePath<ObjectExpression>\n): NodePath<Expression> | undefined {\n const getter = descriptor\n .get('properties')\n .filter(isTypedNode('ObjectProperty'))\n .find((p) => p.get('key').isIdentifier({ name: 'get' }));\n const value = getter?.get('value');\n if (value?.isFunctionExpression()) {\n const returnStatement = value.get('body').get('body')[0];\n if (returnStatement?.isReturnStatement()) {\n const local = returnStatement.get('argument');\n if (local.isExpression()) {\n return local;\n }\n }\n }\n\n return undefined;\n}\n\nfunction collectFromExports(path: NodePath<Identifier>, state: IState): 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()) {\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 return;\n }\n\n saveRef();\n state.exports.push({ exported: property.node.name, local: 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 prop.node.value !== '__esModule' &&\n descriptor?.isObjectExpression()\n ) {\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 state.exports.push({ exported, local });\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 state.exports.push({ exported: '*', local });\n }\n }\n }\n}\n\nfunction collectFromRequireOrExports(\n path: NodePath<Identifier>,\n state: IState\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 = local.scope.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 (parentPath?.isExportSpecifier()) {\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 warn(\n 'evaluator:collectExportsAndImports:unfoldNamespaceImports',\n 'Unknown reference',\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: IState\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: IState\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 state.exports.push({ local, exported });\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 warn(\n 'evaluator:collectExportsAndImports:collectFromExportSpecifier',\n 'Unprocessed ExportSpecifier',\n path.node.type\n );\n}\n\nfunction collectFromExportNamedDeclaration(\n path: NodePath<ExportNamedDeclaration>,\n state: IState\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 exportFromVariableDeclarator(declarator).forEach((prop) => {\n // What is defined\n state.exports.push(prop);\n });\n });\n }\n\n if (declaration.isFunctionDeclaration()) {\n const id = declaration.get('id');\n if (id.isIdentifier()) {\n state.exports.push({\n exported: id.node.name,\n local: id,\n });\n }\n }\n}\n\nfunction collectFromExportDefaultDeclaration(\n path: NodePath<ExportDefaultDeclaration>,\n state: IState\n): void {\n if (isType(path)) return;\n\n const declaration = path.get('declaration');\n state.exports.push({ exported: 'default', local: declaration });\n}\n\nconst cache = new WeakMap<NodePath, IState>();\n\nfunction collectFromAssignmentExpression(\n path: NodePath<AssignmentExpression>,\n state: IState\n): void {\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 exported = '*'; // maybe\n }\n\n if (!exported) return;\n\n if (!right.isCallExpression() || !isRequire(right.get('callee'))) return;\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 state.reexports.push({\n exported,\n imported: '*',\n local: path,\n source,\n });\n\n path.skip();\n}\n\nfunction collectFromCallExpression(\n path: NodePath<CallExpression>,\n state: IState\n) {\n const maybeExportStart = path.get('callee');\n if (\n !maybeExportStart.isIdentifier() ||\n !maybeExportStart.node.name.startsWith('__exportStar')\n ) {\n return;\n }\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\nexport default function collectExportsAndImports(\n path: NodePath,\n force = false\n): IState {\n const state: IState = {\n exportRefs: new Map(),\n exports: [],\n imports: [],\n reexports: [],\n };\n\n if (!force && cache.has(path)) {\n return cache.get(path) ?? state;\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 },\n state\n );\n\n cache.set(path, state);\n\n return state;\n}\n"],"mappings":"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"}
{"version":3,"file":"collectExportsAndImports.js","names":["warn","getScope","isExports","isNotNull","isRequire","isTypedNode","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","importFromVariableDeclarator","isSync","id","isObjectPattern","exportFromVariableDeclarator","init","isExpression","exported","destructed","collectFromDynamicImport","callExpression","isCallExpression","sourcePath","isStringLiteral","container","isAwaited","isAwaitExpression","isVariableDeclarator","prop","getImportTypeByInteropFunction","callee","undefined","startsWith","collectFromRequire","variableDeclarator","unfolded","isMemberExpression","property","isExpressionStatement","isChainOfVoidAssignment","right","isUnaryExpression","operator","isAssignmentExpression","getGetterValueFromDescriptor","descriptor","getter","find","isFunctionExpression","returnStatement","isReturnStatement","collectFromExports","object","memberExpression","exportName","saveRef","exportRefs","has","set","assignmentExpression","left","exports","matchesPattern","obj","isObjectExpression","collectFromRequireOrExports","importItem","binding","getBinding","referenced","referencePath","referencePaths","ancestor","isTSType","isFlowType","computed","isExportSpecifier","collectFromExportAllDeclaration","reexports","collectFromExportSpecifier","isExportDefaultSpecifier","isExportNamespaceSpecifier","collectFromExportNamedDeclaration","declaration","isVariableDeclaration","declarator","isFunctionDeclaration","collectFromExportDefaultDeclaration","cache","WeakMap","collectFromAssignmentExpression","skip","collectFromCallExpression","maybeExportStart","requireCall","collectExportsAndImports","force","Map","AssignmentExpression","CallExpression","ExportAllDeclaration","ExportDefaultDeclaration","ExportNamedDeclaration","ImportDeclaration","Import"],"sources":["../src/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 CallExpression,\n ExportDefaultDeclaration,\n ExportNamedDeclaration,\n ExportSpecifier,\n Identifier,\n Import,\n ImportDeclaration,\n ImportDefaultSpecifier,\n ImportNamespaceSpecifier,\n ImportSpecifier,\n MemberExpression,\n ObjectPattern,\n StringLiteral,\n VariableDeclarator,\n ExportDefaultSpecifier,\n ExportNamespaceSpecifier,\n AssignmentExpression,\n ExportAllDeclaration,\n ObjectExpression,\n Expression,\n} from '@babel/types';\n\nimport { warn } from '@linaria/logger';\n\nimport { getScope } from './getScope';\nimport isExports from './isExports';\nimport isNotNull from './isNotNull';\nimport isRequire from './isRequire';\nimport isTypedNode from './isTypedNode';\n\nexport interface ISideEffectImport {\n imported: null;\n local: NodePath;\n source: string;\n}\n\nexport interface IImport {\n imported: string | 'default' | '*';\n local: NodePath<Identifier | MemberExpression>;\n source: string;\n}\n\nexport interface IExport {\n exported: string | 'default' | '*'; // '*' means re-export all\n local: NodePath;\n}\n\nexport interface IReexport {\n exported: string | 'default' | '*';\n imported: string | 'default' | '*';\n local: NodePath;\n source: string;\n}\n\nexport interface IState {\n exportRefs: Map<string, NodePath<MemberExpression>[]>;\n exports: IExport[];\n imports: (IImport | ISideEffectImport)[];\n reexports: IReexport[];\n}\n\nexport const sideEffectImport = (\n item: IImport | ISideEffectImport\n): item is ISideEffectImport => item.imported === null;\n\nexport const explicitImport = (\n item: IImport | ISideEffectImport\n): item is IImport => item.imported !== null;\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 }];\n },\n\n ImportDefaultSpecifier(\n path: NodePath<ImportDefaultSpecifier>,\n source\n ): IImport[] {\n const local = path.get('local');\n return [{ imported: 'default', local, source }];\n },\n\n ImportNamespaceSpecifier(\n path: NodePath<ImportNamespaceSpecifier>,\n source\n ): IImport[] {\n const local = path.get('local');\n return unfoldNamespaceImport({ imported: '*', local, source });\n },\n};\n\nfunction collectFromImportDeclaration(\n path: NodePath<ImportDeclaration>,\n state: IState\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: null, 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 what: string | '*';\n as: NodePath<Identifier>;\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\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 warn('evaluator:collectExportsAndImports', '`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 warn(\n 'evaluator:collectExportsAndImports:importFromVariableDeclarator',\n 'Unknown type of id',\n id.node.type\n );\n\n return [];\n}\n\nfunction exportFromVariableDeclarator(\n path: NodePath<VariableDeclarator>\n): IExport[] {\n const id = path.get('id');\n const init = path.get('init');\n\n // If there is no init expression, we can ignore this export\n if (!init || !init.isExpression()) return [];\n\n if (id.isIdentifier()) {\n // It is `export const a = 1;`\n return [\n {\n local: init,\n exported: id.node.name,\n },\n ];\n }\n\n if (id.isObjectPattern()) {\n // It is `export const { a, ...rest } = obj;`\n return whatIsDestructed(id).map((destructed) => ({\n local: init,\n exported: destructed.as.node.name,\n }));\n }\n\n // What else it can be?\n warn(\n 'evaluator:collectExportsAndImports:exportFromVariableDeclarator',\n 'Unknown type of id',\n id.node.type\n );\n\n return [];\n}\n\nfunction collectFromDynamicImport(path: NodePath<Import>, state: IState): 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({ imported: prop.what, local: prop.as, source })\n );\n }\n}\n\nfunction getImportTypeByInteropFunction(\n path: NodePath<CallExpression>\n): '*' | 'default' | undefined {\n const callee = path.get('callee');\n if (!callee.isIdentifier()) {\n return undefined;\n }\n\n const { name } = callee.node;\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 ) {\n return '*';\n }\n\n if (name.startsWith('__rest')) {\n return '*';\n }\n\n return undefined;\n}\n\nfunction collectFromRequire(path: NodePath<Identifier>, state: IState): void {\n if (!isRequire(path)) return;\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 = getImportTypeByInteropFunction(container);\n if (!imported) {\n // It's not a transpiled import.\n // TODO: Can we guess that it's a namespace import?\n warn(\n 'evaluator:collectExportsAndImports',\n 'Unknown wrapper of require',\n container.node.callee\n );\n return;\n }\n\n const { parentPath: variableDeclarator } = container;\n if (!variableDeclarator.isVariableDeclarator()) {\n // TODO: Where else it can be?\n warn(\n 'evaluator:collectExportsAndImports',\n 'Unexpected require inside',\n variableDeclarator.node.type\n );\n return;\n }\n\n const id = variableDeclarator.get('id');\n if (!id.isIdentifier()) {\n warn(\n 'evaluator:collectExportsAndImports',\n 'Id should be Identifier',\n variableDeclarator.node.type\n );\n return;\n }\n\n if (imported === '*') {\n const unfolded = unfoldNamespaceImport({\n imported,\n local: id,\n source,\n });\n state.imports.push(...unfolded);\n } else {\n state.imports.push({\n imported,\n local: id,\n source,\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 warn(\n 'evaluator:collectExportsAndImports',\n 'Property should be Identifier or StringLiteral',\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 });\n } else {\n warn(\n 'evaluator:collectExportsAndImports',\n 'Id should be Identifier',\n variableDeclarator.node.type\n );\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 });\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 });\n\n state.imports.push(...unfolded);\n } else {\n state.imports.push({\n imported: prop.what,\n local: prop.as,\n source,\n });\n }\n });\n }\n\n if (container.isExpressionStatement()) {\n // Looks like standalone require\n state.imports.push({\n imported: null,\n local: container,\n source,\n });\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 getGetterValueFromDescriptor(\n descriptor: NodePath<ObjectExpression>\n): NodePath<Expression> | undefined {\n const getter = descriptor\n .get('properties')\n .filter(isTypedNode('ObjectProperty'))\n .find((p) => p.get('key').isIdentifier({ name: 'get' }));\n const value = getter?.get('value');\n if (value?.isFunctionExpression()) {\n const returnStatement = value.get('body').get('body')[0];\n if (returnStatement?.isReturnStatement()) {\n const local = returnStatement.get('argument');\n if (local.isExpression()) {\n return local;\n }\n }\n }\n\n return undefined;\n}\n\nfunction collectFromExports(path: NodePath<Identifier>, state: IState): 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()) {\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 return;\n }\n\n saveRef();\n state.exports.push({ exported: property.node.name, local: 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 prop.node.value !== '__esModule' &&\n descriptor?.isObjectExpression()\n ) {\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 state.exports.push({ exported, local });\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 state.exports.push({ exported: '*', local });\n }\n }\n }\n}\n\nfunction collectFromRequireOrExports(\n path: NodePath<Identifier>,\n state: IState\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 (parentPath?.isExportSpecifier()) {\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 warn(\n 'evaluator:collectExportsAndImports:unfoldNamespaceImports',\n 'Unknown reference',\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: IState\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: IState\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 state.exports.push({ local, exported });\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 warn(\n 'evaluator:collectExportsAndImports:collectFromExportSpecifier',\n 'Unprocessed ExportSpecifier',\n path.node.type\n );\n}\n\nfunction collectFromExportNamedDeclaration(\n path: NodePath<ExportNamedDeclaration>,\n state: IState\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 exportFromVariableDeclarator(declarator).forEach((prop) => {\n // What is defined\n state.exports.push(prop);\n });\n });\n }\n\n if (declaration.isFunctionDeclaration()) {\n const id = declaration.get('id');\n if (id.isIdentifier()) {\n state.exports.push({\n exported: id.node.name,\n local: id,\n });\n }\n }\n}\n\nfunction collectFromExportDefaultDeclaration(\n path: NodePath<ExportDefaultDeclaration>,\n state: IState\n): void {\n if (isType(path)) return;\n\n const declaration = path.get('declaration');\n state.exports.push({ exported: 'default', local: declaration });\n}\n\nconst cache = new WeakMap<NodePath, IState>();\n\nfunction collectFromAssignmentExpression(\n path: NodePath<AssignmentExpression>,\n state: IState\n): void {\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 exported = '*'; // maybe\n }\n\n if (!exported) return;\n\n if (!right.isCallExpression() || !isRequire(right.get('callee'))) return;\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 state.reexports.push({\n exported,\n imported: '*',\n local: path,\n source,\n });\n\n path.skip();\n}\n\nfunction collectFromCallExpression(\n path: NodePath<CallExpression>,\n state: IState\n) {\n const maybeExportStart = path.get('callee');\n if (\n !maybeExportStart.isIdentifier() ||\n !maybeExportStart.node.name.startsWith('__exportStar')\n ) {\n return;\n }\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\nexport default function collectExportsAndImports(\n path: NodePath,\n force = false\n): IState {\n const state: IState = {\n exportRefs: new Map(),\n exports: [],\n imports: [],\n reexports: [],\n };\n\n if (!force && cache.has(path)) {\n return cache.get(path) ?? state;\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 },\n state\n );\n\n cache.set(path, state);\n\n return state;\n}\n"],"mappings":"AAAA;;AACA;AA0BA,SAASA,IAAT,QAAqB,iBAArB;AAEA,SAASC,QAAT,QAAyB,YAAzB;AACA,OAAOC,SAAP,MAAsB,aAAtB;AACA,OAAOC,SAAP,MAAsB,aAAtB;AACA,OAAOC,SAAP,MAAsB,aAAtB;AACA,OAAOC,WAAP,MAAwB,eAAxB;AAiCA,OAAO,MAAMC,gBAAgB,GAC3BC,IAD8B,IAEAA,IAAI,CAACC,QAAL,KAAkB,IAF3C;AAIP,OAAO,MAAMC,cAAc,GACzBF,IAD4B,IAERA,IAAI,CAACC,QAAL,KAAkB,IAFjC;;AAIP,SAASE,QAAT,CAAkB;EAAEC;AAAF,CAAlB,EAA0E;EACxE,OAAOA,IAAI,CAACC,IAAL,KAAc,YAAd,GAA6BD,IAAI,CAACE,IAAlC,GAAyCF,IAAI,CAACG,KAArD;AACD,C,CAED;;;AACA,MAAMC,MAAM,GAAIC,CAAD,IAGZ,gBAAgBA,CAAC,CAACL,IAAlB,IAA0BK,CAAC,CAACL,IAAF,CAAOM,UAAP,KAAsB,MAAjD,IACC,gBAAgBD,CAAC,CAACL,IAAlB,IAA0BK,CAAC,CAACL,IAAF,CAAOO,UAAP,KAAsB,MAJnD,C,CAMA;;;AAEA,MAAMC,UAKL,GAAG;EACFC,eAAe,CAACC,IAAD,EAAkCC,MAAlC,EAAqD;IAClE,IAAIP,MAAM,CAACM,IAAD,CAAV,EAAkB,OAAO,EAAP;IAClB,MAAMb,QAAQ,GAAGE,QAAQ,CAACW,IAAI,CAACE,GAAL,CAAS,UAAT,CAAD,CAAzB;IACA,MAAMC,KAAK,GAAGH,IAAI,CAACE,GAAL,CAAS,OAAT,CAAd;IACA,OAAO,CAAC;MAAEf,QAAF;MAAYgB,KAAZ;MAAmBF;IAAnB,CAAD,CAAP;EACD,CANC;;EAQFG,sBAAsB,CACpBJ,IADoB,EAEpBC,MAFoB,EAGT;IACX,MAAME,KAAK,GAAGH,IAAI,CAACE,GAAL,CAAS,OAAT,CAAd;IACA,OAAO,CAAC;MAAEf,QAAQ,EAAE,SAAZ;MAAuBgB,KAAvB;MAA8BF;IAA9B,CAAD,CAAP;EACD,CAdC;;EAgBFI,wBAAwB,CACtBL,IADsB,EAEtBC,MAFsB,EAGX;IACX,MAAME,KAAK,GAAGH,IAAI,CAACE,GAAL,CAAS,OAAT,CAAd;IACA,OAAOI,qBAAqB,CAAC;MAAEnB,QAAQ,EAAE,GAAZ;MAAiBgB,KAAjB;MAAwBF;IAAxB,CAAD,CAA5B;EACD;;AAtBC,CALJ;;AA8BA,SAASM,4BAAT,CACEP,IADF,EAEEQ,KAFF,EAGQ;EACN;EACA,IAAId,MAAM,CAACM,IAAD,CAAV,EAAkB;EAElB,MAAMC,MAAM,GAAGZ,QAAQ,CAACW,IAAI,CAACE,GAAL,CAAS,QAAT,CAAD,CAAvB;EACA,MAAMO,UAAU,GAAGT,IAAI,CAACE,GAAL,CAAS,YAAT,CAAnB;;EAEA,IAAIO,UAAU,CAACC,MAAX,KAAsB,CAA1B,EAA6B;IAC3BF,KAAK,CAACG,OAAN,CAAcC,IAAd,CAAmB;MAAEzB,QAAQ,EAAE,IAAZ;MAAkBgB,KAAK,EAAEH,IAAzB;MAA+BC;IAA/B,CAAnB;EACD;;EAEDQ,UAAU,CAACI,OAAX,CAA8CC,SAA3B,IAAsD;IACvE,IAAIA,SAAS,CAACC,iBAAV,MAAiCrB,MAAM,CAACoB,SAAD,CAA3C,EAAwD;IAExD,MAAME,SAAS,GAAGlB,UAAU,CAC1BgB,SAAS,CAACxB,IAAV,CAAeC,IADW,CAA5B;IAIAiB,KAAK,CAACG,OAAN,CAAcC,IAAd,CAAmB,GAAGI,SAAS,CAACF,SAAD,EAAYb,MAAZ,CAA/B;EACD,CARD;AASD;;AAOD,SAASgB,iBAAT,CAA2BjB,IAA3B,EAA2CkB,IAA3C,EAA2E;EACzE,MAAMC,MAAkB,GAAG,EAA3B;EACA,IAAIC,OAAwB,GAAGpB,IAA/B;;EACA,OAAOoB,OAAO,IAAIF,IAAI,CAACE,OAAD,CAAtB,EAAiC;IAC/BD,MAAM,CAACP,IAAP,CAAYQ,OAAZ;IACAA,OAAO,GAAGA,OAAO,CAACC,UAAlB;EACD;;EAED,OAAOF,MAAP;AACD;;AAED,SAASG,gBAAT,CACEC,aADF,EAEiB;EACf,MAAMC,eAA8B,GAAG,EAAvC;EACAD,aAAa,CAACE,QAAd,CAAuB;IACrBC,UAAU,CAACC,UAAD,EAAa;MACrB,IAAIA,UAAU,CAACC,mBAAX,EAAJ,EAAsC;QACpC,MAAMC,MAAM,GAAGF,UAAU,CAACN,UAA1B;;QACA,IAAIQ,MAAM,CAACC,gBAAP,CAAwB;UAAErC,KAAK,EAAEkC,UAAU,CAACrC;QAApB,CAAxB,CAAJ,EAAyD;UACvD,MAAMyC,KAAK,GAAGd,iBAAiB,CAACY,MAAD,EAAUlC,CAAD,IAAOA,CAAC,KAAK4B,aAAtB,CAAjB,CACXS,MADW,CACJhD,WAAW,CAAC,gBAAD,CADP,EAEXiD,GAFW,CAENtC,CAAD,IAAO;YACV,MAAMuC,GAAG,GAAGvC,CAAC,CAACO,GAAF,CAAM,KAAN,CAAZ;;YACA,IAAI,CAACgC,GAAG,CAACC,YAAJ,EAAL,EAAyB;cACvB;cACA,OAAO,IAAP;YACD;;YAED,OAAOD,GAAP;UACD,CAVW,EAWXF,MAXW,CAWJlD,SAXI,CAAd;UAYAiD,KAAK,CAACK,OAAN;;UAEA,IAAIL,KAAK,CAACrB,MAAN,GAAe,CAAnB,EAAsB;YACpBc,eAAe,CAACZ,IAAhB,CAAqB;cACnByB,IAAI,EAAEN,KAAK,CAAC,CAAD,CAAL,CAASzC,IAAT,CAAcE,IADD;cAEnB8C,EAAE,EAAEX;YAFe,CAArB;UAID;;UAED;QACD;;QAED,IAAIE,MAAM,CAACU,aAAP,CAAqB;UAAEC,QAAQ,EAAEb,UAAU,CAACrC;QAAvB,CAArB,CAAJ,EAAyD;UACvDkC,eAAe,CAACZ,IAAhB,CAAqB;YACnByB,IAAI,EAAE,GADa;YAEnBC,EAAE,EAAEX;UAFe,CAArB;QAID;MACF;IACF;;EApCoB,CAAvB;EAuCA,OAAOH,eAAP;AACD;;AAED,SAASiB,4BAAT,CACEzC,IADF,EAEE0C,MAFF,EAGiB;EACf,MAAMC,EAAE,GAAG3C,IAAI,CAACE,GAAL,CAAS,IAAT,CAAX;;EACA,IAAIyC,EAAE,CAACR,YAAH,EAAJ,EAAuB;IACrB;IACA,OAAO,CACL;MACEG,EAAE,EAAEK,EADN;MAEEN,IAAI,EAAE;IAFR,CADK,CAAP;EAMD;;EAED,IAAI,CAACK,MAAL,EAAa;IACX;IACA;IACA/D,IAAI,CAAC,oCAAD,EAAuC,4BAAvC,CAAJ;IACA,OAAO,EAAP;EACD;;EAED,IAAIgE,EAAE,CAACC,eAAH,EAAJ,EAA0B;IACxB,OAAOtB,gBAAgB,CAACqB,EAAD,CAAvB;EACD,CArBc,CAuBf;;;EACAhE,IAAI,CACF,iEADE,EAEF,oBAFE,EAGFgE,EAAE,CAACrD,IAAH,CAAQC,IAHN,CAAJ;EAMA,OAAO,EAAP;AACD;;AAED,SAASsD,4BAAT,CACE7C,IADF,EAEa;EACX,MAAM2C,EAAE,GAAG3C,IAAI,CAACE,GAAL,CAAS,IAAT,CAAX;EACA,MAAM4C,IAAI,GAAG9C,IAAI,CAACE,GAAL,CAAS,MAAT,CAAb,CAFW,CAIX;;EACA,IAAI,CAAC4C,IAAD,IAAS,CAACA,IAAI,CAACC,YAAL,EAAd,EAAmC,OAAO,EAAP;;EAEnC,IAAIJ,EAAE,CAACR,YAAH,EAAJ,EAAuB;IACrB;IACA,OAAO,CACL;MACEhC,KAAK,EAAE2C,IADT;MAEEE,QAAQ,EAAEL,EAAE,CAACrD,IAAH,CAAQE;IAFpB,CADK,CAAP;EAMD;;EAED,IAAImD,EAAE,CAACC,eAAH,EAAJ,EAA0B;IACxB;IACA,OAAOtB,gBAAgB,CAACqB,EAAD,CAAhB,CAAqBV,GAArB,CAA0BgB,UAAD,KAAiB;MAC/C9C,KAAK,EAAE2C,IADwC;MAE/CE,QAAQ,EAAEC,UAAU,CAACX,EAAX,CAAchD,IAAd,CAAmBE;IAFkB,CAAjB,CAAzB,CAAP;EAID,CAvBU,CAyBX;;;EACAb,IAAI,CACF,iEADE,EAEF,oBAFE,EAGFgE,EAAE,CAACrD,IAAH,CAAQC,IAHN,CAAJ;EAMA,OAAO,EAAP;AACD;;AAED,SAAS2D,wBAAT,CAAkClD,IAAlC,EAA0DQ,KAA1D,EAA+E;EAC7E,MAAM;IAAEa,UAAU,EAAE8B;EAAd,IAAiCnD,IAAvC;;EACA,IAAI,CAACmD,cAAc,CAACC,gBAAf,EAAL,EAAwC;IACtC;IACA;EACD;;EAED,MAAM,CAACC,UAAD,IAAeF,cAAc,CAACjD,GAAf,CAAmB,WAAnB,CAArB;;EACA,IAAI,CAACmD,UAAD,IAAe,CAACA,UAAU,CAACC,eAAX,EAApB,EAAkD;IAChD;IACA;EACD;;EAED,MAAMrD,MAAM,GAAGoD,UAAU,CAAC/D,IAAX,CAAgBG,KAA/B;EAEA,IAAI;IAAE4B,UAAU,EAAEkC,SAAd;IAAyBrB;EAAzB,IAAiCiB,cAArC;EACA,IAAIK,SAAS,GAAG,KAAhB;;EAEA,IAAID,SAAS,CAACE,iBAAV,EAAJ,EAAmC;IACjC;IACAD,SAAS,GAAG,IAAZ;IACAtB,GAAG,GAAGqB,SAAS,CAACrB,GAAhB;IACAqB,SAAS,GAAGA,SAAS,CAAClC,UAAtB;EACD,CAvB4E,CAyB7E;;;EACA,IAAIa,GAAG,KAAK,MAAR,IAAkBqB,SAAS,CAACG,oBAAV,EAAtB,EAAwD;IACtDjB,4BAA4B,CAACc,SAAD,EAAYC,SAAZ,CAA5B,CAAmDvB,GAAnD,CAAwD0B,IAAD,IACrDnD,KAAK,CAACG,OAAN,CAAcC,IAAd,CAAmB;MAAEzB,QAAQ,EAAEwE,IAAI,CAACtB,IAAjB;MAAuBlC,KAAK,EAAEwD,IAAI,CAACrB,EAAnC;MAAuCrC;IAAvC,CAAnB,CADF;EAGD;AACF;;AAED,SAAS2D,8BAAT,CACE5D,IADF,EAE+B;EAC7B,MAAM6D,MAAM,GAAG7D,IAAI,CAACE,GAAL,CAAS,QAAT,CAAf;;EACA,IAAI,CAAC2D,MAAM,CAAC1B,YAAP,EAAL,EAA4B;IAC1B,OAAO2B,SAAP;EACD;;EAED,MAAM;IAAEtE;EAAF,IAAWqE,MAAM,CAACvE,IAAxB;;EACA,IACEE,IAAI,CAACuE,UAAL,CAAgB,wBAAhB,KACAvE,IAAI,CAACuE,UAAL,CAAgB,iBAAhB,CAFF,EAGE;IACA,OAAO,SAAP;EACD;;EAED,IACEvE,IAAI,CAACuE,UAAL,CAAgB,yBAAhB,KACAvE,IAAI,CAACuE,UAAL,CAAgB,cAAhB,CAFF,EAGE;IACA,OAAO,GAAP;EACD;;EAED,IAAIvE,IAAI,CAACuE,UAAL,CAAgB,QAAhB,CAAJ,EAA+B;IAC7B,OAAO,GAAP;EACD;;EAED,OAAOD,SAAP;AACD;;AAED,SAASE,kBAAT,CAA4BhE,IAA5B,EAAwDQ,KAAxD,EAA6E;EAC3E,IAAI,CAACzB,SAAS,CAACiB,IAAD,CAAd,EAAsB;EAEtB,MAAM;IAAEqB,UAAU,EAAE8B;EAAd,IAAiCnD,IAAvC;;EACA,IAAI,CAACmD,cAAc,CAACC,gBAAf,EAAL,EAAwC;IACtC;IACA;EACD;;EAED,MAAM,CAACC,UAAD,IAAeF,cAAc,CAACjD,GAAf,CAAmB,WAAnB,CAArB;;EACA,IAAI,CAACmD,UAAD,IAAe,CAACA,UAAU,CAACC,eAAX,EAApB,EAAkD;IAChD;IACA;EACD;;EAED,MAAMrD,MAAM,GAAGoD,UAAU,CAAC/D,IAAX,CAAgBG,KAA/B;EAEA,MAAM;IAAE4B,UAAU,EAAEkC,SAAd;IAAyBrB;EAAzB,IAAiCiB,cAAvC;;EAEA,IAAII,SAAS,CAACH,gBAAV,MAAgClB,GAAG,KAAK,CAA5C,EAA+C;IAC7C;IACA;IACA,MAAM/C,QAAQ,GAAGyE,8BAA8B,CAACL,SAAD,CAA/C;;IACA,IAAI,CAACpE,QAAL,EAAe;MACb;MACA;MACAR,IAAI,CACF,oCADE,EAEF,4BAFE,EAGF4E,SAAS,CAACjE,IAAV,CAAeuE,MAHb,CAAJ;MAKA;IACD;;IAED,MAAM;MAAExC,UAAU,EAAE4C;IAAd,IAAqCV,SAA3C;;IACA,IAAI,CAACU,kBAAkB,CAACP,oBAAnB,EAAL,EAAgD;MAC9C;MACA/E,IAAI,CACF,oCADE,EAEF,2BAFE,EAGFsF,kBAAkB,CAAC3E,IAAnB,CAAwBC,IAHtB,CAAJ;MAKA;IACD;;IAED,MAAMoD,EAAE,GAAGsB,kBAAkB,CAAC/D,GAAnB,CAAuB,IAAvB,CAAX;;IACA,IAAI,CAACyC,EAAE,CAACR,YAAH,EAAL,EAAwB;MACtBxD,IAAI,CACF,oCADE,EAEF,yBAFE,EAGFsF,kBAAkB,CAAC3E,IAAnB,CAAwBC,IAHtB,CAAJ;MAKA;IACD;;IAED,IAAIJ,QAAQ,KAAK,GAAjB,EAAsB;MACpB,MAAM+E,QAAQ,GAAG5D,qBAAqB,CAAC;QACrCnB,QADqC;QAErCgB,KAAK,EAAEwC,EAF8B;QAGrC1C;MAHqC,CAAD,CAAtC;MAKAO,KAAK,CAACG,OAAN,CAAcC,IAAd,CAAmB,GAAGsD,QAAtB;IACD,CAPD,MAOO;MACL1D,KAAK,CAACG,OAAN,CAAcC,IAAd,CAAmB;QACjBzB,QADiB;QAEjBgB,KAAK,EAAEwC,EAFU;QAGjB1C;MAHiB,CAAnB;IAKD;EACF;;EAED,IAAIsD,SAAS,CAACY,kBAAV,EAAJ,EAAoC;IAClC;IACA,MAAMC,QAAQ,GAAGb,SAAS,CAACrD,GAAV,CAAc,UAAd,CAAjB;;IACA,IAAI,CAACkE,QAAQ,CAACjC,YAAT,EAAD,IAA4B,CAACiC,QAAQ,CAACd,eAAT,EAAjC,EAA6D;MAC3D3E,IAAI,CACF,oCADE,EAEF,gDAFE,EAGFyF,QAAQ,CAAC9E,IAAT,CAAcC,IAHZ,CAAJ;MAMA;IACD;;IAED,MAAM;MAAE8B,UAAU,EAAE4C;IAAd,IAAqCV,SAA3C;;IAEA,IAAIU,kBAAkB,CAACP,oBAAnB,EAAJ,EAA+C;MAC7C;MACA,MAAMf,EAAE,GAAGsB,kBAAkB,CAAC/D,GAAnB,CAAuB,IAAvB,CAAX;;MACA,IAAIyC,EAAE,CAACR,YAAH,EAAJ,EAAuB;QACrB3B,KAAK,CAACG,OAAN,CAAcC,IAAd,CAAmB;UACjBzB,QAAQ,EAAEE,QAAQ,CAAC+E,QAAD,CADD;UAEjBjE,KAAK,EAAEwC,EAFU;UAGjB1C;QAHiB,CAAnB;MAKD,CAND,MAMO;QACLtB,IAAI,CACF,oCADE,EAEF,yBAFE,EAGFsF,kBAAkB,CAAC3E,IAAnB,CAAwBC,IAHtB,CAAJ;MAKD;IACF,CAhBD,MAgBO;MACL;MACA;MACAiB,KAAK,CAACG,OAAN,CAAcC,IAAd,CAAmB;QACjBzB,QAAQ,EAAEE,QAAQ,CAAC+E,QAAD,CADD;QAEjBjE,KAAK,EAAEoD,SAFU;QAGjBtD;MAHiB,CAAnB;IAKD;;IAED;EACD,CAjH0E,CAmH3E;;;EACA,IAAIiC,GAAG,KAAK,MAAR,IAAkBqB,SAAS,CAACG,oBAAV,EAAtB,EAAwD;IACtDjB,4BAA4B,CAACc,SAAD,EAAY,IAAZ,CAA5B,CAA8C1C,OAA9C,CAAuD8C,IAAD,IAAU;MAC9D,IAAIA,IAAI,CAACtB,IAAL,KAAc,GAAlB,EAAuB;QACrB,MAAM6B,QAAQ,GAAG5D,qBAAqB,CAAC;UACrCnB,QAAQ,EAAE,GAD2B;UAErCgB,KAAK,EAAEwD,IAAI,CAACrB,EAFyB;UAGrCrC;QAHqC,CAAD,CAAtC;QAMAO,KAAK,CAACG,OAAN,CAAcC,IAAd,CAAmB,GAAGsD,QAAtB;MACD,CARD,MAQO;QACL1D,KAAK,CAACG,OAAN,CAAcC,IAAd,CAAmB;UACjBzB,QAAQ,EAAEwE,IAAI,CAACtB,IADE;UAEjBlC,KAAK,EAAEwD,IAAI,CAACrB,EAFK;UAGjBrC;QAHiB,CAAnB;MAKD;IACF,CAhBD;EAiBD;;EAED,IAAIsD,SAAS,CAACc,qBAAV,EAAJ,EAAuC;IACrC;IACA7D,KAAK,CAACG,OAAN,CAAcC,IAAd,CAAmB;MACjBzB,QAAQ,EAAE,IADO;MAEjBgB,KAAK,EAAEoD,SAFU;MAGjBtD;IAHiB,CAAnB;EAKD;AACF;;AAED,SAASqE,uBAAT,CACEtE,IADF,EAEW;EACT,MAAMuE,KAAK,GAAGvE,IAAI,CAACE,GAAL,CAAS,OAAT,CAAd;;EACA,IAAIqE,KAAK,CAACC,iBAAN,CAAwB;IAAEC,QAAQ,EAAE;EAAZ,CAAxB,CAAJ,EAAmD;IACjD,OAAO,IAAP;EACD;;EAED,IAAIF,KAAK,CAACG,sBAAN,EAAJ,EAAoC;IAClC,OAAOJ,uBAAuB,CAACC,KAAD,CAA9B;EACD;;EAED,OAAO,KAAP;AACD;;AAED,SAASI,4BAAT,CACEC,UADF,EAEoC;EAClC,MAAMC,MAAM,GAAGD,UAAU,CACtB1E,GADY,CACR,YADQ,EAEZ8B,MAFY,CAELhD,WAAW,CAAC,gBAAD,CAFN,EAGZ8F,IAHY,CAGNnF,CAAD,IAAOA,CAAC,CAACO,GAAF,CAAM,KAAN,EAAaiC,YAAb,CAA0B;IAAE3C,IAAI,EAAE;EAAR,CAA1B,CAHA,CAAf;EAIA,MAAMC,KAAK,GAAGoF,MAAM,EAAE3E,GAAR,CAAY,OAAZ,CAAd;;EACA,IAAIT,KAAK,EAAEsF,oBAAP,EAAJ,EAAmC;IACjC,MAAMC,eAAe,GAAGvF,KAAK,CAACS,GAAN,CAAU,MAAV,EAAkBA,GAAlB,CAAsB,MAAtB,EAA8B,CAA9B,CAAxB;;IACA,IAAI8E,eAAe,EAAEC,iBAAjB,EAAJ,EAA0C;MACxC,MAAM9E,KAAK,GAAG6E,eAAe,CAAC9E,GAAhB,CAAoB,UAApB,CAAd;;MACA,IAAIC,KAAK,CAAC4C,YAAN,EAAJ,EAA0B;QACxB,OAAO5C,KAAP;MACD;IACF;EACF;;EAED,OAAO2D,SAAP;AACD;;AAED,SAASoB,kBAAT,CAA4BlF,IAA5B,EAAwDQ,KAAxD,EAA6E;EAC3E,IAAI,CAAC3B,SAAS,CAACmB,IAAD,CAAd,EAAsB;;EAEtB,IAAIA,IAAI,CAACqB,UAAL,CAAgB8C,kBAAhB,CAAmC;IAAEgB,MAAM,EAAEnF,IAAI,CAACV;EAAf,CAAnC,CAAJ,EAA+D;IAC7D;IACA,MAAM8F,gBAAgB,GAAGpF,IAAI,CAACqB,UAA9B;IACA,MAAM+C,QAAQ,GAAGgB,gBAAgB,CAAClF,GAAjB,CAAqB,UAArB,CAAjB;;IACA,IAAI,CAACkE,QAAQ,CAACjC,YAAT,EAAL,EAA8B;MAC5B;IACD;;IAED,MAAMkD,UAAU,GAAGjB,QAAQ,CAAC9E,IAAT,CAAcE,IAAjC;;IAEA,MAAM8F,OAAO,GAAG,MAAM;MACpB;MACA,IAAI,CAAC9E,KAAK,CAAC+E,UAAN,CAAiBC,GAAjB,CAAqBH,UAArB,CAAL,EAAuC;QACrC7E,KAAK,CAAC+E,UAAN,CAAiBE,GAAjB,CAAqBJ,UAArB,EAAiC,EAAjC;MACD;;MAED7E,KAAK,CAAC+E,UAAN,CAAiBrF,GAAjB,CAAqBmF,UAArB,EAAkCzE,IAAlC,CAAuCwE,gBAAvC;IACD,CAPD;;IASA,MAAMM,oBAAoB,GAAGN,gBAAgB,CAAC/D,UAA9C;;IAEA,IACE,CAACqE,oBAAoB,CAAChB,sBAArB,CAA4C;MAC3CiB,IAAI,EAAEP,gBAAgB,CAAC9F;IADoB,CAA5C,CADH,EAIE;MACA;MACAgG,OAAO;MACP;IACD;;IAED,MAAMf,KAAK,GAAGmB,oBAAoB,CAACxF,GAArB,CAAyB,OAAzB,CAAd;;IAEA,IAAIoE,uBAAuB,CAACoB,oBAAD,CAA3B,EAAmD;MACjD;MACA;IACD;;IAED,MAAM;MAAElG;IAAF,IAAW4E,QAAQ,CAAC9E,IAA1B;;IACA,IAAIE,IAAI,KAAK,YAAb,EAA2B;MACzB;IACD;;IAED8F,OAAO;IACP9E,KAAK,CAACoF,OAAN,CAAchF,IAAd,CAAmB;MAAEoC,QAAQ,EAAEoB,QAAQ,CAAC9E,IAAT,CAAcE,IAA1B;MAAgCW,KAAK,EAAEoE;IAAvC,CAAnB;IAEA;EACD;;EAED,IACEvE,IAAI,CAACqB,UAAL,CAAgB+B,gBAAhB,MACApD,IAAI,CAACqB,UAAL,CAAgBnB,GAAhB,CAAoB,QAApB,EAA8B2F,cAA9B,CAA6C,uBAA7C,CAFF,EAGE;IACA,MAAM,CAACC,GAAD,EAAMnC,IAAN,EAAYiB,UAAZ,IAA0B5E,IAAI,CAACqB,UAAL,CAAgBnB,GAAhB,CAAoB,WAApB,CAAhC;;IACA,IACE4F,GAAG,EAAE3D,YAAL,CAAkBnC,IAAI,CAACV,IAAvB,KACAqE,IAAI,EAAEL,eAAN,EADA,IAEAK,IAAI,CAACrE,IAAL,CAAUG,KAAV,KAAoB,YAFpB,IAGAmF,UAAU,EAAEmB,kBAAZ,EAJF,EAKE;MACA;AACN;AACA;AACA;AACA;AACA;AACA;AACA;MACM,MAAM/C,QAAQ,GAAGW,IAAI,CAACrE,IAAL,CAAUG,KAA3B;MACA,MAAMU,KAAK,GAAGwE,4BAA4B,CAACC,UAAD,CAA1C;;MACA,IAAIzE,KAAJ,EAAW;QACTK,KAAK,CAACoF,OAAN,CAAchF,IAAd,CAAmB;UAAEoC,QAAF;UAAY7C;QAAZ,CAAnB;MACD;IACF,CAnBD,MAmBO,IACL2F,GAAG,EAAE3D,YAAL,CAAkBnC,IAAI,CAACV,IAAvB,KACAqE,IAAI,EAAExB,YAAN,EADA,IAEAyC,UAAU,EAAEmB,kBAAZ,EAHK,EAIL;MACA;AACN;AACA;AACA;AACA;AACA;AACA;AACA;MACM,MAAM5F,KAAK,GAAGwE,4BAA4B,CAACC,UAAD,CAA1C;;MACA,IAAIzE,KAAJ,EAAW;QACTK,KAAK,CAACoF,OAAN,CAAchF,IAAd,CAAmB;UAAEoC,QAAQ,EAAE,GAAZ;UAAiB7C;QAAjB,CAAnB;MACD;IACF;EACF;AACF;;AAED,SAAS6F,2BAAT,CACEhG,IADF,EAEEQ,KAFF,EAGQ;EACN,IAAIzB,SAAS,CAACiB,IAAD,CAAb,EAAqB;IACnBgE,kBAAkB,CAAChE,IAAD,EAAOQ,KAAP,CAAlB;EACD,CAFD,MAEO,IAAI3B,SAAS,CAACmB,IAAD,CAAb,EAAqB;IAC1BkF,kBAAkB,CAAClF,IAAD,EAAOQ,KAAP,CAAlB;EACD;AACF;;AAED,SAASF,qBAAT,CACE2F,UADF,EAEa;EACX,MAAM9E,MAAiB,GAAG,EAA1B;EACA,MAAM;IAAEhB;EAAF,IAAY8F,UAAlB;;EACA,IAAI,CAAC9F,KAAK,CAACgC,YAAN,EAAL,EAA2B;IACzB;IACA,OAAO,CAAC8D,UAAD,CAAP;EACD;;EAED,MAAMC,OAAO,GAAGtH,QAAQ,CAACuB,KAAD,CAAR,CAAgBgG,UAAhB,CAA2BhG,KAAK,CAACb,IAAN,CAAWE,IAAtC,CAAhB;;EACA,IAAI,CAAC0G,OAAO,EAAEE,UAAd,EAA0B;IACxB;IACA;IACA,OAAO,CAACH,UAAD,CAAP;EACD;;EAED,KAAK,MAAMI,aAAX,IAA4BH,OAAO,EAAEI,cAAT,IAA2B,EAAvD,EAA2D;IACzD,IACED,aAAa,CAACvB,IAAd,CACGyB,QAAD,IAAcA,QAAQ,CAACC,QAAT,MAAuBD,QAAQ,CAACE,UAAT,EADvC,CADF,EAIE;MACA;IACD;;IAED,MAAM;MAAEpF;IAAF,IAAiBgF,aAAvB;;IACA,IAAIhF,UAAU,EAAE8C,kBAAZ,MAAoCkC,aAAa,CAACnE,GAAd,KAAsB,QAA9D,EAAwE;MACtE,MAAMkC,QAAQ,GAAG/C,UAAU,CAACnB,GAAX,CAAe,UAAf,CAAjB;MACA,MAAMiF,MAAM,GAAG9D,UAAU,CAACnB,GAAX,CAAe,QAAf,CAAf;MACA,IAAIf,QAAJ;;MACA,IAAIkC,UAAU,CAAC/B,IAAX,CAAgBoH,QAAhB,IAA4BtC,QAAQ,CAACd,eAAT,EAAhC,EAA4D;QAC1DnE,QAAQ,GAAGiF,QAAQ,CAAC9E,IAAT,CAAcG,KAAzB;MACD,CAFD,MAEO,IAAI,CAAC4B,UAAU,CAAC/B,IAAX,CAAgBoH,QAAjB,IAA6BtC,QAAQ,CAACjC,YAAT,EAAjC,EAA0D;QAC/DhD,QAAQ,GAAGiF,QAAQ,CAAC9E,IAAT,CAAcE,IAAzB;MACD,CAFM,MAEA;QACLL,QAAQ,GAAG,IAAX;MACD;;MAED,IAAIgG,MAAM,CAAChD,YAAP,MAAyBhD,QAA7B,EAAuC;QACrCgC,MAAM,CAACP,IAAP,CAAY,EACV,GAAGqF,UADO;UAEV9G,QAFU;UAGVgB,KAAK,EAAEkB;QAHG,CAAZ;MAKD,CAND,MAMO;QACLF,MAAM,CAACP,IAAP,CAAYqF,UAAZ;QACA;MACD;;MAED;IACD;;IAED,IAAI5E,UAAU,EAAEqC,oBAAZ,MAAsC2C,aAAa,CAACnE,GAAd,KAAsB,MAAhE,EAAwE;MACtEO,4BAA4B,CAACpB,UAAD,EAAa,IAAb,CAA5B,CAA+CY,GAA/C,CAAoD0B,IAAD,IACjDxC,MAAM,CAACP,IAAP,CAAY,EAAE,GAAGqF,UAAL;QAAiB9G,QAAQ,EAAEwE,IAAI,CAACtB,IAAhC;QAAsClC,KAAK,EAAEwD,IAAI,CAACrB;MAAlD,CAAZ,CADF;MAIA;IACD;;IAED,IAAIjB,UAAU,EAAEsF,iBAAZ,EAAJ,EAAqC;MACnC;MACAxF,MAAM,CAACP,IAAP,CAAYqF,UAAZ;MACA;IACD,CAhDwD,CAkDzD;IACA;;;IACAtH,IAAI,CACF,2DADE,EAEF,mBAFE,EAGF0H,aAAa,CAAC/G,IAAd,CAAmBC,IAHjB,CAAJ;IAKA4B,MAAM,CAACP,IAAP,CAAYqF,UAAZ;IACA;EACD;;EAED,OAAO9E,MAAP;AACD;;AAED,SAASyF,+BAAT,CACE5G,IADF,EAEEQ,KAFF,EAGQ;EACN,IAAId,MAAM,CAACM,IAAD,CAAV,EAAkB;EAClB,MAAMC,MAAM,GAAGD,IAAI,CAACE,GAAL,CAAS,QAAT,GAAoBZ,IAApB,EAA0BG,KAAzC;EACA,IAAI,CAACQ,MAAL,EAAa,OAHP,CAKN;;EACAO,KAAK,CAACqG,SAAN,CAAgBjG,IAAhB,CAAqB;IACnBoC,QAAQ,EAAE,GADS;IAEnB7D,QAAQ,EAAE,GAFS;IAGnBgB,KAAK,EAAEH,IAHY;IAInBC;EAJmB,CAArB;AAMD;;AAED,SAAS6G,0BAAT,CACE9G,IADF,EAIEC,MAJF,EAKEO,KALF,EAMQ;EACN,IAAIR,IAAI,CAAC2G,iBAAL,EAAJ,EAA8B;IAC5B,MAAM3D,QAAQ,GAAG3D,QAAQ,CAACW,IAAI,CAACE,GAAL,CAAS,UAAT,CAAD,CAAzB;;IACA,IAAID,MAAJ,EAAY;MACV;MACA,MAAMd,QAAQ,GAAGa,IAAI,CAACE,GAAL,CAAS,OAAT,EAAkBZ,IAAlB,CAAuBE,IAAxC;MACAgB,KAAK,CAACqG,SAAN,CAAgBjG,IAAhB,CAAqB;QACnBoC,QADmB;QAEnB7D,QAFmB;QAGnBgB,KAAK,EAAEH,IAHY;QAInBC;MAJmB,CAArB;IAMD,CATD,MASO;MACL,MAAME,KAAK,GAAGH,IAAI,CAACE,GAAL,CAAS,OAAT,CAAd;MACAM,KAAK,CAACoF,OAAN,CAAchF,IAAd,CAAmB;QAAET,KAAF;QAAS6C;MAAT,CAAnB;IACD;;IAED;EACD;;EAED,IAAIhD,IAAI,CAAC+G,wBAAL,MAAmC9G,MAAvC,EAA+C;IAC7C;IACAO,KAAK,CAACqG,SAAN,CAAgBjG,IAAhB,CAAqB;MACnBoC,QAAQ,EAAE,SADS;MAEnB7D,QAAQ,EAAE,SAFS;MAGnBgB,KAAK,EAAEH,IAHY;MAInBC;IAJmB,CAArB;EAMD;;EAED,IAAID,IAAI,CAACgH,0BAAL,MAAqC/G,MAAzC,EAAiD;IAC/C,MAAM+C,QAAQ,GAAGhD,IAAI,CAACE,GAAL,CAAS,UAAT,EAAqBZ,IAArB,CAA0BE,IAA3C,CAD+C,CAE/C;;IACAgB,KAAK,CAACqG,SAAN,CAAgBjG,IAAhB,CAAqB;MACnBoC,QADmB;MAEnB7D,QAAQ,EAAE,GAFS;MAGnBgB,KAAK,EAAEH,IAHY;MAInBC;IAJmB,CAArB;EAMD,CAvCK,CAyCN;;;EACAtB,IAAI,CACF,+DADE,EAEF,6BAFE,EAGFqB,IAAI,CAACV,IAAL,CAAUC,IAHR,CAAJ;AAKD;;AAED,SAAS0H,iCAAT,CACEjH,IADF,EAEEQ,KAFF,EAGQ;EACN,IAAId,MAAM,CAACM,IAAD,CAAV,EAAkB;EAElB,MAAMC,MAAM,GAAGD,IAAI,CAACE,GAAL,CAAS,QAAT,GAAoBZ,IAApB,EAA0BG,KAAzC;EACA,MAAMgB,UAAU,GAAGT,IAAI,CAACE,GAAL,CAAS,YAAT,CAAnB;;EACA,IAAIO,UAAJ,EAAgB;IACdA,UAAU,CAACI,OAAX,CAAoBC,SAAD,IACjBgG,0BAA0B,CAAChG,SAAD,EAAYb,MAAZ,EAAoBO,KAApB,CAD5B;EAGD;;EAED,MAAM0G,WAAW,GAAGlH,IAAI,CAACE,GAAL,CAAS,aAAT,CAApB;;EACA,IAAIgH,WAAW,CAACC,qBAAZ,EAAJ,EAAyC;IACvCD,WAAW,CAAChH,GAAZ,CAAgB,cAAhB,EAAgCW,OAAhC,CAAyCuG,UAAD,IAAgB;MACtDvE,4BAA4B,CAACuE,UAAD,CAA5B,CAAyCvG,OAAzC,CAAkD8C,IAAD,IAAU;QACzD;QACAnD,KAAK,CAACoF,OAAN,CAAchF,IAAd,CAAmB+C,IAAnB;MACD,CAHD;IAID,CALD;EAMD;;EAED,IAAIuD,WAAW,CAACG,qBAAZ,EAAJ,EAAyC;IACvC,MAAM1E,EAAE,GAAGuE,WAAW,CAAChH,GAAZ,CAAgB,IAAhB,CAAX;;IACA,IAAIyC,EAAE,CAACR,YAAH,EAAJ,EAAuB;MACrB3B,KAAK,CAACoF,OAAN,CAAchF,IAAd,CAAmB;QACjBoC,QAAQ,EAAEL,EAAE,CAACrD,IAAH,CAAQE,IADD;QAEjBW,KAAK,EAAEwC;MAFU,CAAnB;IAID;EACF;AACF;;AAED,SAAS2E,mCAAT,CACEtH,IADF,EAEEQ,KAFF,EAGQ;EACN,IAAId,MAAM,CAACM,IAAD,CAAV,EAAkB;EAElB,MAAMkH,WAAW,GAAGlH,IAAI,CAACE,GAAL,CAAS,aAAT,CAApB;EACAM,KAAK,CAACoF,OAAN,CAAchF,IAAd,CAAmB;IAAEoC,QAAQ,EAAE,SAAZ;IAAuB7C,KAAK,EAAE+G;EAA9B,CAAnB;AACD;;AAED,MAAMK,KAAK,GAAG,IAAIC,OAAJ,EAAd;;AAEA,SAASC,+BAAT,CACEzH,IADF,EAEEQ,KAFF,EAGQ;EACN,MAAMmF,IAAI,GAAG3F,IAAI,CAACE,GAAL,CAAS,MAAT,CAAb;EACA,MAAMqE,KAAK,GAAGvE,IAAI,CAACE,GAAL,CAAS,OAAT,CAAd;EAEA,IAAI8C,QAAJ;;EAEA,IAAI2C,IAAI,CAACxB,kBAAL,MAA6BtF,SAAS,CAAC8G,IAAI,CAACzF,GAAL,CAAS,QAAT,CAAD,CAA1C,EAAgE;IAC9D,MAAMkE,QAAQ,GAAGuB,IAAI,CAACzF,GAAL,CAAS,UAAT,CAAjB;;IACA,IAAIkE,QAAQ,CAACjC,YAAT,EAAJ,EAA6B;MAC3Ba,QAAQ,GAAGoB,QAAQ,CAAC9E,IAAT,CAAcE,IAAzB;IACD;EACF,CALD,MAKO,IAAIX,SAAS,CAAC8G,IAAD,CAAb,EAAqB;IAC1B3C,QAAQ,GAAG,GAAX,CAD0B,CACV;EACjB;;EAED,IAAI,CAACA,QAAL,EAAe;EAEf,IAAI,CAACuB,KAAK,CAACnB,gBAAN,EAAD,IAA6B,CAACrE,SAAS,CAACwF,KAAK,CAACrE,GAAN,CAAU,QAAV,CAAD,CAA3C,EAAkE;EAElE,MAAMmD,UAAU,GAAGkB,KAAK,CAACrE,GAAN,CAAU,WAAV,IAAyB,CAAzB,CAAnB;EACA,MAAMD,MAAM,GAAGoD,UAAU,CAACC,eAAX,KACXD,UAAU,CAAC/D,IAAX,CAAgBG,KADL,GAEXqE,SAFJ;EAGA,IAAI,CAAC7D,MAAL,EAAa,OAvBP,CAyBN;;EAEAO,KAAK,CAACqG,SAAN,CAAgBjG,IAAhB,CAAqB;IACnBoC,QADmB;IAEnB7D,QAAQ,EAAE,GAFS;IAGnBgB,KAAK,EAAEH,IAHY;IAInBC;EAJmB,CAArB;EAOAD,IAAI,CAAC0H,IAAL;AACD;;AAED,SAASC,yBAAT,CACE3H,IADF,EAEEQ,KAFF,EAGE;EACA,MAAMoH,gBAAgB,GAAG5H,IAAI,CAACE,GAAL,CAAS,QAAT,CAAzB;;EACA,IACE,CAAC0H,gBAAgB,CAACzF,YAAjB,EAAD,IACA,CAACyF,gBAAgB,CAACtI,IAAjB,CAAsBE,IAAtB,CAA2BuE,UAA3B,CAAsC,cAAtC,CAFH,EAGE;IACA;EACD;;EAED,MAAM,CAAC8D,WAAD,EAAcjC,OAAd,IAAyB5F,IAAI,CAACE,GAAL,CAAS,WAAT,CAA/B;EACA,IAAI,CAACrB,SAAS,CAAC+G,OAAD,CAAd,EAAyB;EACzB,IAAI,CAACiC,WAAW,CAACzE,gBAAZ,EAAL,EAAqC;EACrC,MAAMS,MAAM,GAAGgE,WAAW,CAAC3H,GAAZ,CAAgB,QAAhB,CAAf;EACA,MAAMmD,UAAU,GAAGwE,WAAW,CAAC3H,GAAZ,CAAgB,WAAhB,IAA+B,CAA/B,CAAnB;EACA,IAAI,CAACnB,SAAS,CAAC8E,MAAD,CAAV,IAAsB,CAACR,UAAU,CAACC,eAAX,EAA3B,EAAyD;EAEzD,MAAMrD,MAAM,GAAGoD,UAAU,CAAC/D,IAAX,CAAgBG,KAA/B;EACA,IAAI,CAACQ,MAAL,EAAa;EAEbO,KAAK,CAACqG,SAAN,CAAgBjG,IAAhB,CAAqB;IACnBoC,QAAQ,EAAE,GADS;IAEnB7D,QAAQ,EAAE,GAFS;IAGnBgB,KAAK,EAAEH,IAHY;IAInBC;EAJmB,CAArB;EAOAD,IAAI,CAAC0H,IAAL;AACD;;AAED,eAAe,SAASI,wBAAT,CACb9H,IADa,EAEb+H,KAAK,GAAG,KAFK,EAGL;EACR,MAAMvH,KAAa,GAAG;IACpB+E,UAAU,EAAE,IAAIyC,GAAJ,EADQ;IAEpBpC,OAAO,EAAE,EAFW;IAGpBjF,OAAO,EAAE,EAHW;IAIpBkG,SAAS,EAAE;EAJS,CAAtB;;EAOA,IAAI,CAACkB,KAAD,IAAUR,KAAK,CAAC/B,GAAN,CAAUxF,IAAV,CAAd,EAA+B;IAC7B,OAAOuH,KAAK,CAACrH,GAAN,CAAUF,IAAV,KAAmBQ,KAA1B;EACD;;EAEDR,IAAI,CAACyB,QAAL,CACE;IACEwG,oBAAoB,EAAER,+BADxB;IAEES,cAAc,EAAEP,yBAFlB;IAGEQ,oBAAoB,EAAEvB,+BAHxB;IAIEwB,wBAAwB,EAAEd,mCAJ5B;IAKEe,sBAAsB,EAAEpB,iCAL1B;IAMEqB,iBAAiB,EAAE/H,4BANrB;IAOEgI,MAAM,EAAErF,wBAPV;IAQExB,UAAU,EAAEsE;EARd,CADF,EAWExF,KAXF;EAcA+G,KAAK,CAAC9B,GAAN,CAAUzF,IAAV,EAAgBQ,KAAhB;EAEA,OAAOA,KAAP;AACD"}

@@ -0,5 +1,22 @@

import { getScope } from './getScope';
function isInVoid(path) {
return path.parentPath?.isUnaryExpression({
operator: 'void'
}) ?? false;
}
function isBindingIdentifier(path) {
return path.isBindingIdentifier() && !isInVoid(path);
}
function isReferencedIdentifier(path) {
return path.isReferencedIdentifier() || isInVoid(path);
} // For some reasons, `isBindingIdentifier` returns true for identifiers inside `void` expressions.
const checkers = {
binding: ex => ex.isBindingIdentifier(),
both: ex => ex.isBindingIdentifier() || ex.isReferencedIdentifier(),
referenced: ex => ex.isReferencedIdentifier()
binding: ex => isBindingIdentifier(ex),
both: ex => isBindingIdentifier(ex) || isReferencedIdentifier(ex),
referenced: ex => isReferencedIdentifier(ex)
};

@@ -23,3 +40,3 @@ export function nonType(path) {

const binding = path.scope.getBinding(path.node.name);
const binding = getScope(path).getBinding(path.node.name);

@@ -26,0 +43,0 @@ if (!binding) {

@@ -1,1 +0,1 @@

{"version":3,"file":"findIdentifiers.js","names":["checkers","binding","ex","isBindingIdentifier","both","isReferencedIdentifier","referenced","nonType","path","find","p","isTSTypeReference","isTSTypeQuery","isFlowType","isFlowDeclaration","findIdentifiers","expressions","type","identifiers","forEach","emit","node","removed","scope","getBinding","name","isAncestor","push","isIdentifier","isJSXIdentifier","traverse","TSTypeAnnotation","skip","Identifier","JSXIdentifier"],"sources":["../src/findIdentifiers.ts"],"sourcesContent":["import type { NodePath } from '@babel/traverse';\nimport type { Node, Identifier, JSXIdentifier } from '@babel/types';\n\ntype FindType = 'binding' | 'both' | 'referenced';\n\nconst checkers: Record<FindType, (ex: NodePath) => boolean> = {\n binding: (ex) => ex.isBindingIdentifier(),\n both: (ex) => ex.isBindingIdentifier() || ex.isReferencedIdentifier(),\n referenced: (ex) => ex.isReferencedIdentifier(),\n};\n\nexport function nonType(path: NodePath): boolean {\n return !path.find(\n (p) =>\n p.isTSTypeReference() ||\n p.isTSTypeQuery() ||\n p.isFlowType() ||\n p.isFlowDeclaration()\n );\n}\n\nexport default function findIdentifiers(\n expressions: NodePath<Node | null | undefined>[],\n type: FindType = 'referenced'\n): NodePath<Identifier | JSXIdentifier>[] {\n const identifiers: NodePath<Identifier | JSXIdentifier>[] = [];\n\n expressions.forEach((ex) => {\n const emit = (path: NodePath<Identifier | JSXIdentifier>) => {\n if (!path.node || path.removed || !checkers[type](path)) {\n return;\n }\n\n if (!nonType(path)) {\n // If skip in TSTypeAnnotation visitor doesn't work\n return;\n }\n\n // TODO: Is there a better way to check that it's a local variable?\n\n const binding = path.scope.getBinding(path.node.name);\n if (!binding) {\n return;\n }\n\n if (type === 'referenced' && ex.isAncestor(binding.path)) {\n // This identifier is declared inside the expression. We don't need it.\n return;\n }\n\n identifiers.push(path);\n };\n\n if (ex.isIdentifier() || ex.isJSXIdentifier()) {\n emit(ex);\n } else {\n ex.traverse({\n TSTypeAnnotation(path) {\n // We ignore identifiers in type annotations\n // It will produce broken TS code, but we don't care\n path.skip();\n },\n Identifier(path: NodePath<Identifier>) {\n emit(path);\n },\n JSXIdentifier(path: NodePath<JSXIdentifier>) {\n emit(path);\n },\n });\n }\n });\n\n return identifiers;\n}\n"],"mappings":"AAKA,MAAMA,QAAqD,GAAG;EAC5DC,OAAO,EAAGC,EAAD,IAAQA,EAAE,CAACC,mBAAH,EAD2C;EAE5DC,IAAI,EAAGF,EAAD,IAAQA,EAAE,CAACC,mBAAH,MAA4BD,EAAE,CAACG,sBAAH,EAFkB;EAG5DC,UAAU,EAAGJ,EAAD,IAAQA,EAAE,CAACG,sBAAH;AAHwC,CAA9D;AAMA,OAAO,SAASE,OAAT,CAAiBC,IAAjB,EAA0C;EAC/C,OAAO,CAACA,IAAI,CAACC,IAAL,CACLC,CAAD,IACEA,CAAC,CAACC,iBAAF,MACAD,CAAC,CAACE,aAAF,EADA,IAEAF,CAAC,CAACG,UAAF,EAFA,IAGAH,CAAC,CAACI,iBAAF,EALI,CAAR;AAOD;AAED,eAAe,SAASC,eAAT,CACbC,WADa,EAEbC,IAAc,GAAG,YAFJ,EAG2B;EACxC,MAAMC,WAAmD,GAAG,EAA5D;EAEAF,WAAW,CAACG,OAAZ,CAAqBjB,EAAD,IAAQ;IAC1B,MAAMkB,IAAI,GAAIZ,IAAD,IAAgD;MAC3D,IAAI,CAACA,IAAI,CAACa,IAAN,IAAcb,IAAI,CAACc,OAAnB,IAA8B,CAACtB,QAAQ,CAACiB,IAAD,CAAR,CAAeT,IAAf,CAAnC,EAAyD;QACvD;MACD;;MAED,IAAI,CAACD,OAAO,CAACC,IAAD,CAAZ,EAAoB;QAClB;QACA;MACD,CAR0D,CAU3D;;;MAEA,MAAMP,OAAO,GAAGO,IAAI,CAACe,KAAL,CAAWC,UAAX,CAAsBhB,IAAI,CAACa,IAAL,CAAUI,IAAhC,CAAhB;;MACA,IAAI,CAACxB,OAAL,EAAc;QACZ;MACD;;MAED,IAAIgB,IAAI,KAAK,YAAT,IAAyBf,EAAE,CAACwB,UAAH,CAAczB,OAAO,CAACO,IAAtB,CAA7B,EAA0D;QACxD;QACA;MACD;;MAEDU,WAAW,CAACS,IAAZ,CAAiBnB,IAAjB;IACD,CAvBD;;IAyBA,IAAIN,EAAE,CAAC0B,YAAH,MAAqB1B,EAAE,CAAC2B,eAAH,EAAzB,EAA+C;MAC7CT,IAAI,CAAClB,EAAD,CAAJ;IACD,CAFD,MAEO;MACLA,EAAE,CAAC4B,QAAH,CAAY;QACVC,gBAAgB,CAACvB,IAAD,EAAO;UACrB;UACA;UACAA,IAAI,CAACwB,IAAL;QACD,CALS;;QAMVC,UAAU,CAACzB,IAAD,EAA6B;UACrCY,IAAI,CAACZ,IAAD,CAAJ;QACD,CARS;;QASV0B,aAAa,CAAC1B,IAAD,EAAgC;UAC3CY,IAAI,CAACZ,IAAD,CAAJ;QACD;;MAXS,CAAZ;IAaD;EACF,CA3CD;EA6CA,OAAOU,WAAP;AACD"}
{"version":3,"file":"findIdentifiers.js","names":["getScope","isInVoid","path","parentPath","isUnaryExpression","operator","isBindingIdentifier","isReferencedIdentifier","checkers","binding","ex","both","referenced","nonType","find","p","isTSTypeReference","isTSTypeQuery","isFlowType","isFlowDeclaration","findIdentifiers","expressions","type","identifiers","forEach","emit","node","removed","getBinding","name","isAncestor","push","isIdentifier","isJSXIdentifier","traverse","TSTypeAnnotation","skip","Identifier","JSXIdentifier"],"sources":["../src/findIdentifiers.ts"],"sourcesContent":["import type { NodePath } from '@babel/traverse';\nimport type { Node, Identifier, JSXIdentifier } from '@babel/types';\n\nimport { getScope } from './getScope';\n\ntype FindType = 'binding' | 'both' | 'referenced';\n\nfunction isInVoid(path: NodePath): boolean {\n return path.parentPath?.isUnaryExpression({ operator: 'void' }) ?? false;\n}\n\nfunction isBindingIdentifier(path: NodePath): path is NodePath<Identifier> {\n return path.isBindingIdentifier() && !isInVoid(path);\n}\n\nfunction isReferencedIdentifier(\n path: NodePath\n): path is NodePath<Identifier | JSXIdentifier> {\n return path.isReferencedIdentifier() || isInVoid(path);\n}\n\n// For some reasons, `isBindingIdentifier` returns true for identifiers inside `void` expressions.\nconst checkers: Record<FindType, (ex: NodePath) => boolean> = {\n binding: (ex) => isBindingIdentifier(ex),\n both: (ex) => isBindingIdentifier(ex) || isReferencedIdentifier(ex),\n referenced: (ex) => isReferencedIdentifier(ex),\n};\n\nexport function nonType(path: NodePath): boolean {\n return !path.find(\n (p) =>\n p.isTSTypeReference() ||\n p.isTSTypeQuery() ||\n p.isFlowType() ||\n p.isFlowDeclaration()\n );\n}\n\nexport default function findIdentifiers(\n expressions: NodePath<Node | null | undefined>[],\n type: FindType = 'referenced'\n): NodePath<Identifier | JSXIdentifier>[] {\n const identifiers: NodePath<Identifier | JSXIdentifier>[] = [];\n\n expressions.forEach((ex) => {\n const emit = (path: NodePath<Identifier | JSXIdentifier>) => {\n if (!path.node || path.removed || !checkers[type](path)) {\n return;\n }\n\n if (!nonType(path)) {\n // If skip in TSTypeAnnotation visitor doesn't work\n return;\n }\n\n // TODO: Is there a better way to check that it's a local variable?\n\n const binding = getScope(path).getBinding(path.node.name);\n if (!binding) {\n return;\n }\n\n if (type === 'referenced' && ex.isAncestor(binding.path)) {\n // This identifier is declared inside the expression. We don't need it.\n return;\n }\n\n identifiers.push(path);\n };\n\n if (ex.isIdentifier() || ex.isJSXIdentifier()) {\n emit(ex);\n } else {\n ex.traverse({\n TSTypeAnnotation(path) {\n // We ignore identifiers in type annotations\n // It will produce broken TS code, but we don't care\n path.skip();\n },\n Identifier(path: NodePath<Identifier>) {\n emit(path);\n },\n JSXIdentifier(path: NodePath<JSXIdentifier>) {\n emit(path);\n },\n });\n }\n });\n\n return identifiers;\n}\n"],"mappings":"AAGA,SAASA,QAAT,QAAyB,YAAzB;;AAIA,SAASC,QAAT,CAAkBC,IAAlB,EAA2C;EACzC,OAAOA,IAAI,CAACC,UAAL,EAAiBC,iBAAjB,CAAmC;IAAEC,QAAQ,EAAE;EAAZ,CAAnC,KAA4D,KAAnE;AACD;;AAED,SAASC,mBAAT,CAA6BJ,IAA7B,EAA2E;EACzE,OAAOA,IAAI,CAACI,mBAAL,MAA8B,CAACL,QAAQ,CAACC,IAAD,CAA9C;AACD;;AAED,SAASK,sBAAT,CACEL,IADF,EAEgD;EAC9C,OAAOA,IAAI,CAACK,sBAAL,MAAiCN,QAAQ,CAACC,IAAD,CAAhD;AACD,C,CAED;;;AACA,MAAMM,QAAqD,GAAG;EAC5DC,OAAO,EAAGC,EAAD,IAAQJ,mBAAmB,CAACI,EAAD,CADwB;EAE5DC,IAAI,EAAGD,EAAD,IAAQJ,mBAAmB,CAACI,EAAD,CAAnB,IAA2BH,sBAAsB,CAACG,EAAD,CAFH;EAG5DE,UAAU,EAAGF,EAAD,IAAQH,sBAAsB,CAACG,EAAD;AAHkB,CAA9D;AAMA,OAAO,SAASG,OAAT,CAAiBX,IAAjB,EAA0C;EAC/C,OAAO,CAACA,IAAI,CAACY,IAAL,CACLC,CAAD,IACEA,CAAC,CAACC,iBAAF,MACAD,CAAC,CAACE,aAAF,EADA,IAEAF,CAAC,CAACG,UAAF,EAFA,IAGAH,CAAC,CAACI,iBAAF,EALI,CAAR;AAOD;AAED,eAAe,SAASC,eAAT,CACbC,WADa,EAEbC,IAAc,GAAG,YAFJ,EAG2B;EACxC,MAAMC,WAAmD,GAAG,EAA5D;EAEAF,WAAW,CAACG,OAAZ,CAAqBd,EAAD,IAAQ;IAC1B,MAAMe,IAAI,GAAIvB,IAAD,IAAgD;MAC3D,IAAI,CAACA,IAAI,CAACwB,IAAN,IAAcxB,IAAI,CAACyB,OAAnB,IAA8B,CAACnB,QAAQ,CAACc,IAAD,CAAR,CAAepB,IAAf,CAAnC,EAAyD;QACvD;MACD;;MAED,IAAI,CAACW,OAAO,CAACX,IAAD,CAAZ,EAAoB;QAClB;QACA;MACD,CAR0D,CAU3D;;;MAEA,MAAMO,OAAO,GAAGT,QAAQ,CAACE,IAAD,CAAR,CAAe0B,UAAf,CAA0B1B,IAAI,CAACwB,IAAL,CAAUG,IAApC,CAAhB;;MACA,IAAI,CAACpB,OAAL,EAAc;QACZ;MACD;;MAED,IAAIa,IAAI,KAAK,YAAT,IAAyBZ,EAAE,CAACoB,UAAH,CAAcrB,OAAO,CAACP,IAAtB,CAA7B,EAA0D;QACxD;QACA;MACD;;MAEDqB,WAAW,CAACQ,IAAZ,CAAiB7B,IAAjB;IACD,CAvBD;;IAyBA,IAAIQ,EAAE,CAACsB,YAAH,MAAqBtB,EAAE,CAACuB,eAAH,EAAzB,EAA+C;MAC7CR,IAAI,CAACf,EAAD,CAAJ;IACD,CAFD,MAEO;MACLA,EAAE,CAACwB,QAAH,CAAY;QACVC,gBAAgB,CAACjC,IAAD,EAAO;UACrB;UACA;UACAA,IAAI,CAACkC,IAAL;QACD,CALS;;QAMVC,UAAU,CAACnC,IAAD,EAA6B;UACrCuB,IAAI,CAACvB,IAAD,CAAJ;QACD,CARS;;QASVoC,aAAa,CAACpC,IAAD,EAAgC;UAC3CuB,IAAI,CAACvB,IAAD,CAAJ;QACD;;MAXS,CAAZ;IAaD;EACF,CA3CD;EA6CA,OAAOqB,WAAP;AACD"}

@@ -1,1 +0,1 @@

{"version":3,"file":"index.js","names":["default","asyncResolveFallback","syncResolve","collectExportsAndImports","findIdentifiers","getFileIdx","isExports","isNotNull","isRemoved","isRequire","isTypedNode","isUnnecessaryReactCall","slugify","JSXElementsRemover"],"sources":["../src/index.ts"],"sourcesContent":["export {\n default as asyncResolveFallback,\n syncResolve,\n} from './asyncResolveFallback';\nexport { default as collectExportsAndImports } from './collectExportsAndImports';\nexport * from './collectExportsAndImports';\nexport { default as findIdentifiers } from './findIdentifiers';\nexport { default as getFileIdx } from './getFileIdx';\nexport { default as isExports } from './isExports';\nexport { default as isNotNull } from './isNotNull';\nexport { default as isRemoved } from './isRemoved';\nexport { default as isRequire } from './isRequire';\nexport { default as isTypedNode } from './isTypedNode';\nexport { default as isUnnecessaryReactCall } from './isUnnecessaryReactCall';\nexport * from './options';\nexport * from './scopeHelpers';\nexport { default as slugify } from './slugify';\nexport { default as JSXElementsRemover } from './visitors/JSXElementsRemover';\n"],"mappings":"AAAA,SACEA,OAAO,IAAIC,oBADb,EAEEC,WAFF,QAGO,wBAHP;AAIA,SAASF,OAAO,IAAIG,wBAApB,QAAoD,4BAApD;AACA,cAAc,4BAAd;AACA,SAASH,OAAO,IAAII,eAApB,QAA2C,mBAA3C;AACA,SAASJ,OAAO,IAAIK,UAApB,QAAsC,cAAtC;AACA,SAASL,OAAO,IAAIM,SAApB,QAAqC,aAArC;AACA,SAASN,OAAO,IAAIO,SAApB,QAAqC,aAArC;AACA,SAASP,OAAO,IAAIQ,SAApB,QAAqC,aAArC;AACA,SAASR,OAAO,IAAIS,SAApB,QAAqC,aAArC;AACA,SAAST,OAAO,IAAIU,WAApB,QAAuC,eAAvC;AACA,SAASV,OAAO,IAAIW,sBAApB,QAAkD,0BAAlD;AACA,cAAc,WAAd;AACA,cAAc,gBAAd;AACA,SAASX,OAAO,IAAIY,OAApB,QAAmC,WAAnC;AACA,SAASZ,OAAO,IAAIa,kBAApB,QAA8C,+BAA9C"}
{"version":3,"file":"index.js","names":["default","asyncResolveFallback","syncResolve","collectExportsAndImports","findIdentifiers","getFileIdx","isExports","isNotNull","isRemoved","isRequire","isTypedNode","isUnnecessaryReactCall","slugify","JSXElementsRemover"],"sources":["../src/index.ts"],"sourcesContent":["export type { IVariableContext } from './IVariableContext';\nexport {\n default as asyncResolveFallback,\n syncResolve,\n} from './asyncResolveFallback';\nexport { default as collectExportsAndImports } from './collectExportsAndImports';\nexport * from './collectExportsAndImports';\nexport { default as findIdentifiers } from './findIdentifiers';\nexport { default as getFileIdx } from './getFileIdx';\nexport { default as isExports } from './isExports';\nexport { default as isNotNull } from './isNotNull';\nexport { default as isRemoved } from './isRemoved';\nexport { default as isRequire } from './isRequire';\nexport { default as isTypedNode } from './isTypedNode';\nexport { default as isUnnecessaryReactCall } from './isUnnecessaryReactCall';\nexport * from './options';\nexport * from './scopeHelpers';\nexport { default as slugify } from './slugify';\nexport { default as JSXElementsRemover } from './visitors/JSXElementsRemover';\n"],"mappings":"AACA,SACEA,OAAO,IAAIC,oBADb,EAEEC,WAFF,QAGO,wBAHP;AAIA,SAASF,OAAO,IAAIG,wBAApB,QAAoD,4BAApD;AACA,cAAc,4BAAd;AACA,SAASH,OAAO,IAAII,eAApB,QAA2C,mBAA3C;AACA,SAASJ,OAAO,IAAIK,UAApB,QAAsC,cAAtC;AACA,SAASL,OAAO,IAAIM,SAApB,QAAqC,aAArC;AACA,SAASN,OAAO,IAAIO,SAApB,QAAqC,aAArC;AACA,SAASP,OAAO,IAAIQ,SAApB,QAAqC,aAArC;AACA,SAASR,OAAO,IAAIS,SAApB,QAAqC,aAArC;AACA,SAAST,OAAO,IAAIU,WAApB,QAAuC,eAAvC;AACA,SAASV,OAAO,IAAIW,sBAApB,QAAkD,0BAAlD;AACA,cAAc,WAAd;AACA,cAAc,gBAAd;AACA,SAASX,OAAO,IAAIY,OAApB,QAAmC,WAAnC;AACA,SAASZ,OAAO,IAAIa,kBAApB,QAA8C,+BAA9C"}

@@ -0,1 +1,2 @@

import { getScope } from './getScope';
/**

@@ -5,2 +6,3 @@ * Checks that specified Identifier is a global `exports`

*/
export default function isExports(id) {

@@ -11,4 +13,5 @@ if (!id?.isIdentifier() || id.node.name !== 'exports') {

return id.scope.getBinding('exports') === undefined && id.scope.hasGlobal('exports');
const scope = getScope(id);
return scope.getBinding('exports') === undefined && scope.hasGlobal('exports');
}
//# sourceMappingURL=isExports.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"isExports.js","names":["isExports","id","isIdentifier","node","name","scope","getBinding","undefined","hasGlobal"],"sources":["../src/isExports.ts"],"sourcesContent":["import type { NodePath } from '@babel/traverse';\n\n/**\n * Checks that specified Identifier is a global `exports`\n * @param id\n */\nexport default function isExports(id: NodePath | null | undefined) {\n if (!id?.isIdentifier() || id.node.name !== 'exports') {\n return false;\n }\n\n return (\n id.scope.getBinding('exports') === undefined &&\n id.scope.hasGlobal('exports')\n );\n}\n"],"mappings":"AAEA;AACA;AACA;AACA;AACA,eAAe,SAASA,SAAT,CAAmBC,EAAnB,EAAoD;EACjE,IAAI,CAACA,EAAE,EAAEC,YAAJ,EAAD,IAAuBD,EAAE,CAACE,IAAH,CAAQC,IAAR,KAAiB,SAA5C,EAAuD;IACrD,OAAO,KAAP;EACD;;EAED,OACEH,EAAE,CAACI,KAAH,CAASC,UAAT,CAAoB,SAApB,MAAmCC,SAAnC,IACAN,EAAE,CAACI,KAAH,CAASG,SAAT,CAAmB,SAAnB,CAFF;AAID"}
{"version":3,"file":"isExports.js","names":["getScope","isExports","id","isIdentifier","node","name","scope","getBinding","undefined","hasGlobal"],"sources":["../src/isExports.ts"],"sourcesContent":["import type { NodePath } from '@babel/traverse';\n\nimport { getScope } from './getScope';\n\n/**\n * Checks that specified Identifier is a global `exports`\n * @param id\n */\nexport default function isExports(id: NodePath | null | undefined) {\n if (!id?.isIdentifier() || id.node.name !== 'exports') {\n return false;\n }\n\n const scope = getScope(id);\n\n return (\n scope.getBinding('exports') === undefined && scope.hasGlobal('exports')\n );\n}\n"],"mappings":"AAEA,SAASA,QAAT,QAAyB,YAAzB;AAEA;AACA;AACA;AACA;;AACA,eAAe,SAASC,SAAT,CAAmBC,EAAnB,EAAoD;EACjE,IAAI,CAACA,EAAE,EAAEC,YAAJ,EAAD,IAAuBD,EAAE,CAACE,IAAH,CAAQC,IAAR,KAAiB,SAA5C,EAAuD;IACrD,OAAO,KAAP;EACD;;EAED,MAAMC,KAAK,GAAGN,QAAQ,CAACE,EAAD,CAAtB;EAEA,OACEI,KAAK,CAACC,UAAN,CAAiB,SAAjB,MAAgCC,SAAhC,IAA6CF,KAAK,CAACG,SAAN,CAAgB,SAAhB,CAD/C;AAGD"}

@@ -0,1 +1,2 @@

import { getScope } from './getScope';
/**

@@ -5,2 +6,3 @@ * Checks that specified Identifier is a global `require`

*/
export default function isRequire(id) {

@@ -11,4 +13,5 @@ if (!id?.isIdentifier() || id.node.name !== 'require') {

return id.scope.getBinding('require') === undefined && id.scope.hasGlobal('require');
const scope = getScope(id);
return scope.getBinding('require') === undefined && scope.hasGlobal('require');
}
//# sourceMappingURL=isRequire.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"isRequire.js","names":["isRequire","id","isIdentifier","node","name","scope","getBinding","undefined","hasGlobal"],"sources":["../src/isRequire.ts"],"sourcesContent":["import type { NodePath } from '@babel/traverse';\n\n/**\n * Checks that specified Identifier is a global `require`\n * @param id\n */\nexport default function isRequire(id: NodePath | null | undefined) {\n if (!id?.isIdentifier() || id.node.name !== 'require') {\n return false;\n }\n\n return (\n id.scope.getBinding('require') === undefined &&\n id.scope.hasGlobal('require')\n );\n}\n"],"mappings":"AAEA;AACA;AACA;AACA;AACA,eAAe,SAASA,SAAT,CAAmBC,EAAnB,EAAoD;EACjE,IAAI,CAACA,EAAE,EAAEC,YAAJ,EAAD,IAAuBD,EAAE,CAACE,IAAH,CAAQC,IAAR,KAAiB,SAA5C,EAAuD;IACrD,OAAO,KAAP;EACD;;EAED,OACEH,EAAE,CAACI,KAAH,CAASC,UAAT,CAAoB,SAApB,MAAmCC,SAAnC,IACAN,EAAE,CAACI,KAAH,CAASG,SAAT,CAAmB,SAAnB,CAFF;AAID"}
{"version":3,"file":"isRequire.js","names":["getScope","isRequire","id","isIdentifier","node","name","scope","getBinding","undefined","hasGlobal"],"sources":["../src/isRequire.ts"],"sourcesContent":["import type { NodePath } from '@babel/traverse';\n\nimport { getScope } from './getScope';\n\n/**\n * Checks that specified Identifier is a global `require`\n * @param id\n */\nexport default function isRequire(id: NodePath | null | undefined) {\n if (!id?.isIdentifier() || id.node.name !== 'require') {\n return false;\n }\n\n const scope = getScope(id);\n\n return (\n scope.getBinding('require') === undefined && scope.hasGlobal('require')\n );\n}\n"],"mappings":"AAEA,SAASA,QAAT,QAAyB,YAAzB;AAEA;AACA;AACA;AACA;;AACA,eAAe,SAASC,SAAT,CAAmBC,EAAnB,EAAoD;EACjE,IAAI,CAACA,EAAE,EAAEC,YAAJ,EAAD,IAAuBD,EAAE,CAACE,IAAH,CAAQC,IAAR,KAAiB,SAA5C,EAAuD;IACrD,OAAO,KAAP;EACD;;EAED,MAAMC,KAAK,GAAGN,QAAQ,CAACE,EAAD,CAAtB;EAEA,OACEI,KAAK,CAACC,UAAN,CAAiB,SAAjB,MAAgCC,SAAhC,IAA6CF,KAAK,CAACG,SAAN,CAAgB,SAAhB,CAD/C;AAGD"}
import collectExportsAndImports from './collectExportsAndImports';
import { getScope } from './getScope';

@@ -54,3 +55,3 @@ function getCallee(p) {

if (callee.isIdentifier() && isHookOrCreateElement(callee.node.name)) {
const bindingPath = callee.scope.getBinding(callee.node.name)?.path;
const bindingPath = getScope(callee).getBinding(callee.node.name)?.path;
return reactImports.some(i => bindingPath?.isAncestor(i.local));

@@ -75,3 +76,3 @@ }

const bindingPath = object.scope.getBinding(object.node.name)?.path;
const bindingPath = getScope(object).getBinding(object.node.name)?.path;
return bindingPath?.isAncestor(defaultImport.local) ?? false;

@@ -78,0 +79,0 @@ }

@@ -1,1 +0,1 @@

{"version":3,"file":"isUnnecessaryReactCall.js","names":["collectExportsAndImports","getCallee","p","callee","get","isSequenceExpression","expressions","length","isNumericLiteral","value","JSXRuntimeSource","isJSXRuntime","imports","jsxRuntime","find","i","source","jsxRuntimeName","local","isIdentifier","node","name","isMemberExpression","isHookOrCreateElement","test","isClassicReactRuntime","reactImports","filter","imported","bindingPath","scope","getBinding","path","some","isAncestor","object","property","defaultImport","isUnnecessaryReactCall","programPath","findParent","isProgram"],"sources":["../src/isUnnecessaryReactCall.ts"],"sourcesContent":["import type { NodePath } from '@babel/core';\nimport type { CallExpression } from '@babel/types';\n\nimport type { IImport, ISideEffectImport } from './collectExportsAndImports';\nimport collectExportsAndImports from './collectExportsAndImports';\n\nfunction getCallee(p: NodePath<CallExpression>) {\n const callee = p.get('callee');\n if (callee.isSequenceExpression()) {\n const expressions = callee.get('expressions');\n if (\n expressions.length === 2 &&\n expressions[0].isNumericLiteral({ value: 0 })\n ) {\n return expressions[1];\n }\n\n return callee;\n }\n\n return callee;\n}\n\nconst JSXRuntimeSource = 'react/jsx-runtime';\n\nfunction isJSXRuntime(\n p: NodePath<CallExpression>,\n imports: (IImport | ISideEffectImport)[]\n) {\n const jsxRuntime = imports.find((i) => i.source === JSXRuntimeSource);\n const jsxRuntimeName =\n jsxRuntime?.local?.isIdentifier() && jsxRuntime?.local?.node?.name;\n\n if (jsxRuntime) {\n const callee = getCallee(p);\n if (jsxRuntimeName && callee.isIdentifier({ name: jsxRuntimeName })) {\n return true;\n }\n\n if (\n callee.isMemberExpression() &&\n imports.find((i) => i.source === JSXRuntimeSource && i.local === callee)\n ) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction isHookOrCreateElement(name: string): boolean {\n return name === 'createElement' || /use[A-Z]/.test(name);\n}\n\nfunction isClassicReactRuntime(\n p: NodePath<CallExpression>,\n imports: (IImport | ISideEffectImport)[]\n) {\n const reactImports = imports.filter(\n (i) =>\n i.source === 'react' &&\n (i.imported === 'default' ||\n (i.imported && isHookOrCreateElement(i.imported)))\n ) as IImport[];\n\n if (reactImports.length === 0) return false;\n const callee = getCallee(p);\n if (callee.isIdentifier() && isHookOrCreateElement(callee.node.name)) {\n const bindingPath = callee.scope.getBinding(callee.node.name)?.path;\n return reactImports.some((i) => bindingPath?.isAncestor(i.local));\n }\n\n if (callee.isMemberExpression()) {\n if (reactImports.some((i) => i.local === callee)) {\n // It's React.createElement in CJS\n return true;\n }\n\n const object = callee.get('object');\n const property = callee.get('property');\n const defaultImport = reactImports.find((i) => i.imported === 'default');\n if (\n !defaultImport ||\n !defaultImport.local.isIdentifier() ||\n !property.isIdentifier() ||\n !isHookOrCreateElement(property.node.name) ||\n !object.isIdentifier({ name: defaultImport.local.node.name })\n ) {\n return false;\n }\n\n const bindingPath = object.scope.getBinding(object.node.name)?.path;\n return bindingPath?.isAncestor(defaultImport.local) ?? false;\n }\n\n return false;\n}\n\nexport default function isUnnecessaryReactCall(path: NodePath<CallExpression>) {\n const programPath = path.findParent((p) => p.isProgram());\n if (!programPath) {\n return false;\n }\n\n const { imports } = collectExportsAndImports(programPath);\n\n return isJSXRuntime(path, imports) || isClassicReactRuntime(path, imports);\n}\n"],"mappings":"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"}
{"version":3,"file":"isUnnecessaryReactCall.js","names":["collectExportsAndImports","getScope","getCallee","p","callee","get","isSequenceExpression","expressions","length","isNumericLiteral","value","JSXRuntimeSource","isJSXRuntime","imports","jsxRuntime","find","i","source","jsxRuntimeName","local","isIdentifier","node","name","isMemberExpression","isHookOrCreateElement","test","isClassicReactRuntime","reactImports","filter","imported","bindingPath","getBinding","path","some","isAncestor","object","property","defaultImport","isUnnecessaryReactCall","programPath","findParent","isProgram"],"sources":["../src/isUnnecessaryReactCall.ts"],"sourcesContent":["import type { NodePath } from '@babel/core';\nimport type { CallExpression } from '@babel/types';\n\nimport type { IImport, ISideEffectImport } from './collectExportsAndImports';\nimport collectExportsAndImports from './collectExportsAndImports';\nimport { getScope } from './getScope';\n\nfunction getCallee(p: NodePath<CallExpression>) {\n const callee = p.get('callee');\n if (callee.isSequenceExpression()) {\n const expressions = callee.get('expressions');\n if (\n expressions.length === 2 &&\n expressions[0].isNumericLiteral({ value: 0 })\n ) {\n return expressions[1];\n }\n\n return callee;\n }\n\n return callee;\n}\n\nconst JSXRuntimeSource = 'react/jsx-runtime';\n\nfunction isJSXRuntime(\n p: NodePath<CallExpression>,\n imports: (IImport | ISideEffectImport)[]\n) {\n const jsxRuntime = imports.find((i) => i.source === JSXRuntimeSource);\n const jsxRuntimeName =\n jsxRuntime?.local?.isIdentifier() && jsxRuntime?.local?.node?.name;\n\n if (jsxRuntime) {\n const callee = getCallee(p);\n if (jsxRuntimeName && callee.isIdentifier({ name: jsxRuntimeName })) {\n return true;\n }\n\n if (\n callee.isMemberExpression() &&\n imports.find((i) => i.source === JSXRuntimeSource && i.local === callee)\n ) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction isHookOrCreateElement(name: string): boolean {\n return name === 'createElement' || /use[A-Z]/.test(name);\n}\n\nfunction isClassicReactRuntime(\n p: NodePath<CallExpression>,\n imports: (IImport | ISideEffectImport)[]\n) {\n const reactImports = imports.filter(\n (i) =>\n i.source === 'react' &&\n (i.imported === 'default' ||\n (i.imported && isHookOrCreateElement(i.imported)))\n ) as IImport[];\n\n if (reactImports.length === 0) return false;\n const callee = getCallee(p);\n if (callee.isIdentifier() && isHookOrCreateElement(callee.node.name)) {\n const bindingPath = getScope(callee).getBinding(callee.node.name)?.path;\n return reactImports.some((i) => bindingPath?.isAncestor(i.local));\n }\n\n if (callee.isMemberExpression()) {\n if (reactImports.some((i) => i.local === callee)) {\n // It's React.createElement in CJS\n return true;\n }\n\n const object = callee.get('object');\n const property = callee.get('property');\n const defaultImport = reactImports.find((i) => i.imported === 'default');\n if (\n !defaultImport ||\n !defaultImport.local.isIdentifier() ||\n !property.isIdentifier() ||\n !isHookOrCreateElement(property.node.name) ||\n !object.isIdentifier({ name: defaultImport.local.node.name })\n ) {\n return false;\n }\n\n const bindingPath = getScope(object).getBinding(object.node.name)?.path;\n return bindingPath?.isAncestor(defaultImport.local) ?? false;\n }\n\n return false;\n}\n\nexport default function isUnnecessaryReactCall(path: NodePath<CallExpression>) {\n const programPath = path.findParent((p) => p.isProgram());\n if (!programPath) {\n return false;\n }\n\n const { imports } = collectExportsAndImports(programPath);\n\n return isJSXRuntime(path, imports) || isClassicReactRuntime(path, imports);\n}\n"],"mappings":"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"}

@@ -1,1 +0,1 @@

{"version":3,"file":"types.js","names":[],"sources":["../../src/options/types.ts"],"sourcesContent":["import type { TransformOptions } from '@babel/core';\n\nimport type { Core } from '../babel';\n\nexport type ClassNameSlugVars = {\n dir: string;\n ext: string;\n file: string;\n hash: string;\n name: string;\n title: string;\n};\n\nexport type ClassNameFn = (\n hash: string,\n title: string,\n args: ClassNameSlugVars\n) => string;\n\nexport type Evaluator = (\n filename: string,\n options: StrictOptions,\n text: string,\n only: string[] | null,\n babel: Core\n) => [string, Map<string, string[]> | null];\n\nexport type EvalRule = {\n action: Evaluator | 'ignore' | string;\n babelOptions?: TransformOptions;\n test?: RegExp | ((path: string, code: string) => boolean);\n};\n\nexport type StrictOptions = {\n babelOptions: TransformOptions;\n classNameSlug?: string | ClassNameFn;\n displayName: boolean;\n evaluate: boolean;\n extensions: string[];\n ignore?: RegExp;\n tagResolver?: (source: string, tag: string) => string | null;\n rules: EvalRule[];\n};\n"],"mappings":""}
{"version":3,"file":"types.js","names":[],"sources":["../../src/options/types.ts"],"sourcesContent":["import type { TransformOptions } from '@babel/core';\n\nimport type { IVariableContext } from '../IVariableContext';\nimport type { Core } from '../babel';\n\nexport type ClassNameSlugVars = {\n dir: string;\n ext: string;\n file: string;\n hash: string;\n name: string;\n title: string;\n};\n\nexport type ClassNameFn = (\n hash: string,\n title: string,\n args: ClassNameSlugVars\n) => string;\n\nexport type VariableNameFn = (context: IVariableContext) => string;\n\nexport type Evaluator = (\n filename: string,\n options: StrictOptions,\n text: string,\n only: string[] | null,\n babel: Core\n) => [string, Map<string, string[]> | null];\n\nexport type EvalRule = {\n action: Evaluator | 'ignore' | string;\n babelOptions?: TransformOptions;\n test?: RegExp | ((path: string, code: string) => boolean);\n};\n\nexport type StrictOptions = {\n babelOptions: TransformOptions;\n classNameSlug?: string | ClassNameFn;\n displayName: boolean;\n evaluate: boolean;\n extensions: string[];\n ignore?: RegExp;\n rules: EvalRule[];\n tagResolver?: (source: string, tag: string) => string | null;\n variableNameSlug?: string | VariableNameFn;\n};\n"],"mappings":""}

@@ -5,2 +5,3 @@ /* eslint-disable no-restricted-syntax */

import findIdentifiers, { nonType } from './findIdentifiers';
import { getScope } from './getScope';
import isNotNull from './isNotNull';

@@ -10,3 +11,3 @@ import isRemoved from './isRemoved';

function getBinding(path) {
const binding = path.scope.getBinding(path.node.name);
const binding = getScope(path).getBinding(path.node.name);

@@ -240,3 +241,3 @@ if (!binding) {

if (!item.node || isRemoved(item)) return;
const binding = item.scope.getBinding(item.node.name);
const binding = getScope(item).getBinding(item.node.name);
if (!binding) return;

@@ -264,3 +265,3 @@ const hasReferences = binding.referencePaths.filter(i => !isRemoved(i)).length > 0;

if (paths.length === 0) return;
const rootPath = paths[0].scope.getProgramParent().path;
const rootPath = getScope(paths[0]).getProgramParent().path;

@@ -281,3 +282,3 @@ if (!fixed.has(rootPath)) {

referencedIdentifiers.push(...findIdentifiers([deletingPath], 'referenced'));
declared.push(...findIdentifiers([deletingPath], 'binding').map(i => i.scope.getBinding(i.node.name)));
declared.push(...findIdentifiers([deletingPath], 'binding').map(i => getScope(i).getBinding(i.node.name)));
mutate(deletingPath, p => {

@@ -284,0 +285,0 @@ if (!isRemoved(p)) p.remove();

@@ -1,1 +0,1 @@

{"version":3,"file":"scopeHelpers.js","names":["findIdentifiers","nonType","isNotNull","isRemoved","getBinding","path","binding","scope","node","name","undefined","reference","referencePath","force","isReferencedIdentifier","referencePaths","includes","referenced","references","push","isReferenced","kind","some","i","find","ancestor","isTSType","isFlowType","dereference","filter","length","dereferenceAll","map","identifierPath","referenceAll","forEach","deletingNodes","WeakSet","findParentForDelete","add","parent","parentPath","isProgram","isLogicalExpression","operator","mutate","p","replaceWith","type","value","isObjectProperty","key","get","isIdentifier","maybeDefineProperty","isCallExpression","matchesPattern","isTemplateLiteral","isAssignmentExpression","isForInStatement","left","isFunctionExpression","body","isFunctionDeclaration","isObjectMethod","isClassMethod","isBlockStatement","listKey","prevStatement","isIfStatement","isReturnStatement","slice","every","statement","has","isVariableDeclarator","isExportNamedDeclaration","specifiers","declaration","isExportDefaultDeclaration","isTryStatement","isExportSpecifier","isConditionalExpression","list","referenceEnums","program","traverse","ExpressionStatement","expressionStatement","expression","callee","args","arg","fixed","removeUnreferenced","items","Set","item","hasReferences","forDeleting","constantViolations","identifier","removeWithRelated","result","sort","a","b","localeCompare","paths","rootPath","getProgramParent","clean","referencedIdentifiers","declared","deletingPath","remove","reduce","acc","join","fn","dereferenced","mutated","dead","assignments","assignment","Object","values","getOuterBindingIdentifiers","Identifier","isArrayPattern","elements"],"sources":["../src/scopeHelpers.ts"],"sourcesContent":["/* eslint-disable no-restricted-syntax */\n/* eslint @typescript-eslint/no-use-before-define: [\"error\", { \"functions\": false }] */\n\nimport type { Binding, NodePath } from '@babel/traverse';\nimport type { Identifier, JSXIdentifier, Program } from '@babel/types';\n\nimport findIdentifiers, { nonType } from './findIdentifiers';\nimport isNotNull from './isNotNull';\nimport isRemoved from './isRemoved';\n\nfunction getBinding(path: NodePath<Identifier | JSXIdentifier>) {\n const binding = path.scope.getBinding(path.node.name);\n if (!binding) {\n return undefined;\n }\n\n return binding;\n}\n\nexport function reference(\n path: NodePath<Identifier | JSXIdentifier>,\n referencePath: NodePath = path,\n force = false\n): void {\n if (!force && !path.isReferencedIdentifier()) return;\n\n const binding = getBinding(path);\n if (!binding) return;\n\n if (binding.referencePaths.includes(referencePath)) {\n return;\n }\n\n binding.referenced = true;\n binding.references += 1;\n binding.referencePaths.push(referencePath ?? path);\n}\n\nfunction isReferenced(binding: Binding) {\n if (!binding.referenced) {\n return false;\n }\n\n // If it's a param binding, we can't just remove it\n // because it brakes the function signature. Keep it alive for now.\n if ((binding.kind as string) === 'param') {\n return true;\n }\n\n // If all remaining references are in TS/Flow types, binding is unreferenced\n return binding.referencePaths.some(\n (i) => !i.find((ancestor) => ancestor.isTSType() || ancestor.isFlowType())\n );\n}\n\nexport function dereference(\n path: NodePath<Identifier | JSXIdentifier>\n): Binding | null {\n const binding = getBinding(path);\n if (!binding) return null;\n\n if (!binding.referencePaths.includes(path)) {\n return null;\n }\n\n binding.references -= 1;\n binding.referencePaths = binding.referencePaths.filter((i) => i !== path);\n binding.referenced = binding.referencePaths.length > 0;\n\n return binding;\n}\n\nfunction dereferenceAll(path: NodePath): Binding[] {\n return findIdentifiers([path])\n .map((identifierPath) => dereference(identifierPath))\n .filter(isNotNull);\n}\n\nexport function referenceAll(path: NodePath): void {\n findIdentifiers([path]).forEach((identifierPath) =>\n reference(identifierPath)\n );\n}\n\nconst deletingNodes = new WeakSet<NodePath>();\n\nexport function findParentForDelete(path: NodePath): NodePath | null {\n if (isRemoved(path)) return null;\n\n deletingNodes.add(path);\n\n const parent = path.parentPath;\n\n if (!parent) return path;\n\n if (parent.isProgram()) {\n // Do not delete Program node\n return path;\n }\n\n if (parent.isLogicalExpression({ operator: '&&' })) {\n mutate(parent, (p) => {\n p.replaceWith({\n type: 'BooleanLiteral',\n value: false,\n });\n });\n\n return null;\n }\n\n if (parent.isObjectProperty()) {\n // let's check if it is a special case with Object.defineProperty\n const key = parent.get('key');\n if (key.isIdentifier({ name: 'get' })) {\n const maybeDefineProperty = parent.parentPath.parentPath;\n if (\n maybeDefineProperty?.isCallExpression() &&\n maybeDefineProperty\n .get('callee')\n .matchesPattern('Object.defineProperty')\n ) {\n return findParentForDelete(maybeDefineProperty);\n }\n }\n\n return findParentForDelete(parent);\n }\n\n if (parent.isTemplateLiteral()) {\n mutate(path, (p) => {\n p.replaceWith({\n type: 'StringLiteral',\n value: '',\n });\n });\n return null;\n }\n\n if (parent.isAssignmentExpression()) {\n return findParentForDelete(parent);\n }\n\n if (parent.isCallExpression()) {\n return findParentForDelete(parent);\n }\n\n if (parent.isForInStatement({ left: path.node })) {\n return findParentForDelete(parent);\n }\n\n if (\n parent.isFunctionExpression({ body: path.node }) ||\n parent.isFunctionDeclaration() ||\n parent.isObjectMethod() ||\n parent.isClassMethod()\n ) {\n return findParentForDelete(parent);\n }\n\n if (parent.isBlockStatement()) {\n const body = parent.get('body');\n if (body.length === 1) {\n return findParentForDelete(parent);\n }\n\n if (path.listKey === 'body' && typeof path.key === 'number') {\n if (path.key > 0) {\n // We can check whether the previous one can be removed\n const prevStatement = body[path.key - 1];\n if (\n prevStatement.isIfStatement() &&\n prevStatement.get('consequent').isReturnStatement()\n ) {\n // It's `if (…) return …`, we can remove it.\n return findParentForDelete(prevStatement);\n }\n } else if (\n body.slice(1).every((statement) => deletingNodes.has(statement))\n ) {\n // If it is the first statement and all other statements\n // are marked for deletion, we can remove the whole block.\n return findParentForDelete(parent);\n }\n }\n }\n\n if (parent.isVariableDeclarator()) {\n return findParentForDelete(parent);\n }\n\n if (\n parent.isExportNamedDeclaration() &&\n ((parent.node.specifiers.length === 1 &&\n parent.node.specifiers[0] === path.node) ||\n parent.node.declaration === path.node)\n ) {\n return findParentForDelete(parent);\n }\n\n if (parent.isExportDefaultDeclaration()) {\n return findParentForDelete(parent);\n }\n\n if (parent.isTryStatement()) {\n return findParentForDelete(parent);\n }\n\n if (parent.isExportSpecifier()) {\n return findParentForDelete(parent);\n }\n\n if (parent.isConditionalExpression()) {\n return findParentForDelete(parent);\n }\n\n for (const key of ['body', 'declarations', 'specifiers']) {\n if (path.listKey === key && typeof path.key === 'number') {\n const list = parent.get(key) as NodePath[];\n if (list.length === 1) {\n return findParentForDelete(parent);\n }\n }\n }\n\n for (const key of [\n 'argument',\n 'block',\n 'body',\n 'callee',\n 'discriminant',\n 'expression',\n 'id',\n 'left',\n 'object',\n 'property',\n 'right',\n 'test',\n ]) {\n if (path.key === key && parent.get(key) === path) {\n return findParentForDelete(parent);\n }\n }\n\n return path;\n}\n\n// @babel/preset-typescript transpiles enums, but doesn't reference used identifiers.\nfunction referenceEnums(program: NodePath<Program>) {\n /*\n * We are looking for transpiled enums.\n * (function (Colors) {\n * Colors[\"BLUE\"] = \"#27509A\";\n * })(Colors || (Colors = {}));\n */\n program.traverse({\n ExpressionStatement(expressionStatement) {\n const expression = expressionStatement.get('expression');\n if (!expression.isCallExpression()) return;\n\n const callee = expression.get('callee');\n const args = expression.get('arguments');\n if (!callee.isFunctionExpression() || args.length !== 1) return;\n const [arg] = args;\n if (arg.isLogicalExpression({ operator: '||' })) {\n referenceAll(arg);\n }\n },\n });\n}\n\nconst fixed = new WeakSet<NodePath<Program>>();\n\nfunction removeUnreferenced(items: NodePath<Identifier | JSXIdentifier>[]) {\n const referenced = new Set<NodePath<Identifier | JSXIdentifier>>();\n items.forEach((item) => {\n if (!item.node || isRemoved(item)) return;\n const binding = item.scope.getBinding(item.node.name);\n if (!binding) return;\n const hasReferences =\n binding.referencePaths.filter((i) => !isRemoved(i)).length > 0;\n if (hasReferences) {\n referenced.add(item);\n return;\n }\n\n const forDeleting = [binding.path, ...binding.constantViolations]\n .map((i) => findParentForDelete(i))\n .filter(isNotNull);\n\n if (forDeleting.length === 0) return;\n\n findIdentifiers(forDeleting).forEach((identifier) => {\n referenced.add(identifier);\n });\n\n removeWithRelated(forDeleting);\n });\n\n const result = [...referenced];\n result.sort((a, b) => a.node?.name.localeCompare(b.node?.name));\n\n return result;\n}\n\nfunction removeWithRelated(paths: NodePath[]) {\n if (paths.length === 0) return;\n\n const rootPath = paths[0].scope.getProgramParent().path as NodePath<Program>;\n\n if (!fixed.has(rootPath)) {\n // Some libraries don't care about bindings, references, and other staff\n // So we have to fix the scope before we can detect unused code\n referenceEnums(rootPath);\n fixed.add(rootPath);\n }\n\n let clean = false;\n let referencedIdentifiers: NodePath<Identifier | JSXIdentifier>[] = [];\n const declared: Binding[] = [];\n\n paths.forEach((path) => {\n const deletingPath = findParentForDelete(path);\n if (!deletingPath) return;\n\n referencedIdentifiers.push(\n ...findIdentifiers([deletingPath], 'referenced')\n );\n declared.push(\n ...findIdentifiers([deletingPath], 'binding').map(\n (i) => i.scope.getBinding(i.node.name)!\n )\n );\n\n mutate(deletingPath, (p) => {\n if (!isRemoved(p)) p.remove();\n });\n });\n\n if (declared.length > 0) {\n removeWithRelated(\n declared.reduce(\n (acc, i) => [...acc, ...i.referencePaths.filter(nonType)],\n [] as NodePath[]\n )\n );\n }\n\n referencedIdentifiers.sort((a, b) =>\n a.node?.name.localeCompare(b.node?.name)\n );\n\n while (!clean && referencedIdentifiers.length > 0) {\n const referenced = removeUnreferenced(referencedIdentifiers);\n clean =\n referenced.map((i) => i.node?.name).join('|') ===\n referencedIdentifiers.map((i) => i.node?.name).join('|');\n referencedIdentifiers = referenced;\n }\n}\n\nfunction mutate<T extends NodePath>(path: T, fn: (p: T) => NodePath[] | void) {\n const dereferenced = dereferenceAll(path);\n\n const mutated = fn(path);\n\n referenceAll(path);\n mutated?.forEach((p) => referenceAll(p));\n\n const dead = dereferenced.filter((p) => !isReferenced(p));\n\n const forDeleting: NodePath[] = [];\n dead.forEach((binding) => {\n const assignments = [binding.path, ...binding.constantViolations];\n assignments.forEach((assignment) => {\n const { scope } = assignment;\n const declared = Object.values(\n assignment.getOuterBindingIdentifiers(false)\n );\n if (\n declared.length === 1 &&\n 'name' in declared[0] &&\n declared[0].name === binding.identifier.name\n ) {\n // Only one identifier is declared, so we can remove the whole declaration\n forDeleting.push(assignment);\n return;\n }\n\n if (\n declared.every(\n (identifier) =>\n identifier.type === 'Identifier' &&\n !scope.getBinding(identifier.name)?.referenced\n )\n ) {\n // No other identifier is referenced, so we can remove the whole declaration\n forDeleting.push(assignment);\n return;\n }\n\n // We can't remove the binding, but we can remove the part of it\n assignment.traverse({\n Identifier(identifier) {\n if (identifier.node.name === binding.identifier.name) {\n const parent = identifier.parentPath;\n if (\n parent.isArrayPattern() &&\n identifier.listKey === 'elements' &&\n typeof identifier.key === 'number'\n ) {\n parent.node.elements[identifier.key] = null;\n } else if (parent.isObjectProperty()) {\n forDeleting.push(parent);\n }\n }\n },\n });\n });\n });\n\n removeWithRelated(forDeleting);\n}\n\nexport { mutate, removeWithRelated };\n"],"mappings":"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"}
{"version":3,"file":"scopeHelpers.js","names":["findIdentifiers","nonType","getScope","isNotNull","isRemoved","getBinding","path","binding","node","name","undefined","reference","referencePath","force","isReferencedIdentifier","referencePaths","includes","referenced","references","push","isReferenced","kind","some","i","find","ancestor","isTSType","isFlowType","dereference","filter","length","dereferenceAll","map","identifierPath","referenceAll","forEach","deletingNodes","WeakSet","findParentForDelete","add","parent","parentPath","isProgram","isLogicalExpression","operator","mutate","p","replaceWith","type","value","isObjectProperty","key","get","isIdentifier","maybeDefineProperty","isCallExpression","matchesPattern","isTemplateLiteral","isAssignmentExpression","isForInStatement","left","isFunctionExpression","body","isFunctionDeclaration","isObjectMethod","isClassMethod","isBlockStatement","listKey","prevStatement","isIfStatement","isReturnStatement","slice","every","statement","has","isVariableDeclarator","isExportNamedDeclaration","specifiers","declaration","isExportDefaultDeclaration","isTryStatement","isExportSpecifier","isConditionalExpression","list","referenceEnums","program","traverse","ExpressionStatement","expressionStatement","expression","callee","args","arg","fixed","removeUnreferenced","items","Set","item","hasReferences","forDeleting","constantViolations","identifier","removeWithRelated","result","sort","a","b","localeCompare","paths","rootPath","getProgramParent","clean","referencedIdentifiers","declared","deletingPath","remove","reduce","acc","join","fn","dereferenced","mutated","dead","assignments","assignment","scope","Object","values","getOuterBindingIdentifiers","Identifier","isArrayPattern","elements"],"sources":["../src/scopeHelpers.ts"],"sourcesContent":["/* eslint-disable no-restricted-syntax */\n/* eslint @typescript-eslint/no-use-before-define: [\"error\", { \"functions\": false }] */\n\nimport type { Binding, NodePath } from '@babel/traverse';\nimport type { Identifier, JSXIdentifier, Program } from '@babel/types';\n\nimport findIdentifiers, { nonType } from './findIdentifiers';\nimport { getScope } from './getScope';\nimport isNotNull from './isNotNull';\nimport isRemoved from './isRemoved';\n\nfunction getBinding(path: NodePath<Identifier | JSXIdentifier>) {\n const binding = getScope(path).getBinding(path.node.name);\n if (!binding) {\n return undefined;\n }\n\n return binding;\n}\n\nexport function reference(\n path: NodePath<Identifier | JSXIdentifier>,\n referencePath: NodePath = path,\n force = false\n): void {\n if (!force && !path.isReferencedIdentifier()) return;\n\n const binding = getBinding(path);\n if (!binding) return;\n\n if (binding.referencePaths.includes(referencePath)) {\n return;\n }\n\n binding.referenced = true;\n binding.references += 1;\n binding.referencePaths.push(referencePath ?? path);\n}\n\nfunction isReferenced(binding: Binding) {\n if (!binding.referenced) {\n return false;\n }\n\n // If it's a param binding, we can't just remove it\n // because it brakes the function signature. Keep it alive for now.\n if ((binding.kind as string) === 'param') {\n return true;\n }\n\n // If all remaining references are in TS/Flow types, binding is unreferenced\n return binding.referencePaths.some(\n (i) => !i.find((ancestor) => ancestor.isTSType() || ancestor.isFlowType())\n );\n}\n\nexport function dereference(\n path: NodePath<Identifier | JSXIdentifier>\n): Binding | null {\n const binding = getBinding(path);\n if (!binding) return null;\n\n if (!binding.referencePaths.includes(path)) {\n return null;\n }\n\n binding.references -= 1;\n binding.referencePaths = binding.referencePaths.filter((i) => i !== path);\n binding.referenced = binding.referencePaths.length > 0;\n\n return binding;\n}\n\nfunction dereferenceAll(path: NodePath): Binding[] {\n return findIdentifiers([path])\n .map((identifierPath) => dereference(identifierPath))\n .filter(isNotNull);\n}\n\nexport function referenceAll(path: NodePath): void {\n findIdentifiers([path]).forEach((identifierPath) =>\n reference(identifierPath)\n );\n}\n\nconst deletingNodes = new WeakSet<NodePath>();\n\nexport function findParentForDelete(path: NodePath): NodePath | null {\n if (isRemoved(path)) return null;\n\n deletingNodes.add(path);\n\n const parent = path.parentPath;\n\n if (!parent) return path;\n\n if (parent.isProgram()) {\n // Do not delete Program node\n return path;\n }\n\n if (parent.isLogicalExpression({ operator: '&&' })) {\n mutate(parent, (p) => {\n p.replaceWith({\n type: 'BooleanLiteral',\n value: false,\n });\n });\n\n return null;\n }\n\n if (parent.isObjectProperty()) {\n // let's check if it is a special case with Object.defineProperty\n const key = parent.get('key');\n if (key.isIdentifier({ name: 'get' })) {\n const maybeDefineProperty = parent.parentPath.parentPath;\n if (\n maybeDefineProperty?.isCallExpression() &&\n maybeDefineProperty\n .get('callee')\n .matchesPattern('Object.defineProperty')\n ) {\n return findParentForDelete(maybeDefineProperty);\n }\n }\n\n return findParentForDelete(parent);\n }\n\n if (parent.isTemplateLiteral()) {\n mutate(path, (p) => {\n p.replaceWith({\n type: 'StringLiteral',\n value: '',\n });\n });\n return null;\n }\n\n if (parent.isAssignmentExpression()) {\n return findParentForDelete(parent);\n }\n\n if (parent.isCallExpression()) {\n return findParentForDelete(parent);\n }\n\n if (parent.isForInStatement({ left: path.node })) {\n return findParentForDelete(parent);\n }\n\n if (\n parent.isFunctionExpression({ body: path.node }) ||\n parent.isFunctionDeclaration() ||\n parent.isObjectMethod() ||\n parent.isClassMethod()\n ) {\n return findParentForDelete(parent);\n }\n\n if (parent.isBlockStatement()) {\n const body = parent.get('body');\n if (body.length === 1) {\n return findParentForDelete(parent);\n }\n\n if (path.listKey === 'body' && typeof path.key === 'number') {\n if (path.key > 0) {\n // We can check whether the previous one can be removed\n const prevStatement = body[path.key - 1];\n if (\n prevStatement.isIfStatement() &&\n prevStatement.get('consequent').isReturnStatement()\n ) {\n // It's `if (…) return …`, we can remove it.\n return findParentForDelete(prevStatement);\n }\n } else if (\n body.slice(1).every((statement) => deletingNodes.has(statement))\n ) {\n // If it is the first statement and all other statements\n // are marked for deletion, we can remove the whole block.\n return findParentForDelete(parent);\n }\n }\n }\n\n if (parent.isVariableDeclarator()) {\n return findParentForDelete(parent);\n }\n\n if (\n parent.isExportNamedDeclaration() &&\n ((parent.node.specifiers.length === 1 &&\n parent.node.specifiers[0] === path.node) ||\n parent.node.declaration === path.node)\n ) {\n return findParentForDelete(parent);\n }\n\n if (parent.isExportDefaultDeclaration()) {\n return findParentForDelete(parent);\n }\n\n if (parent.isTryStatement()) {\n return findParentForDelete(parent);\n }\n\n if (parent.isExportSpecifier()) {\n return findParentForDelete(parent);\n }\n\n if (parent.isConditionalExpression()) {\n return findParentForDelete(parent);\n }\n\n for (const key of ['body', 'declarations', 'specifiers']) {\n if (path.listKey === key && typeof path.key === 'number') {\n const list = parent.get(key) as NodePath[];\n if (list.length === 1) {\n return findParentForDelete(parent);\n }\n }\n }\n\n for (const key of [\n 'argument',\n 'block',\n 'body',\n 'callee',\n 'discriminant',\n 'expression',\n 'id',\n 'left',\n 'object',\n 'property',\n 'right',\n 'test',\n ]) {\n if (path.key === key && parent.get(key) === path) {\n return findParentForDelete(parent);\n }\n }\n\n return path;\n}\n\n// @babel/preset-typescript transpiles enums, but doesn't reference used identifiers.\nfunction referenceEnums(program: NodePath<Program>) {\n /*\n * We are looking for transpiled enums.\n * (function (Colors) {\n * Colors[\"BLUE\"] = \"#27509A\";\n * })(Colors || (Colors = {}));\n */\n program.traverse({\n ExpressionStatement(expressionStatement) {\n const expression = expressionStatement.get('expression');\n if (!expression.isCallExpression()) return;\n\n const callee = expression.get('callee');\n const args = expression.get('arguments');\n if (!callee.isFunctionExpression() || args.length !== 1) return;\n const [arg] = args;\n if (arg.isLogicalExpression({ operator: '||' })) {\n referenceAll(arg);\n }\n },\n });\n}\n\nconst fixed = new WeakSet<NodePath<Program>>();\n\nfunction removeUnreferenced(items: NodePath<Identifier | JSXIdentifier>[]) {\n const referenced = new Set<NodePath<Identifier | JSXIdentifier>>();\n items.forEach((item) => {\n if (!item.node || isRemoved(item)) return;\n const binding = getScope(item).getBinding(item.node.name);\n if (!binding) return;\n const hasReferences =\n binding.referencePaths.filter((i) => !isRemoved(i)).length > 0;\n if (hasReferences) {\n referenced.add(item);\n return;\n }\n\n const forDeleting = [binding.path, ...binding.constantViolations]\n .map((i) => findParentForDelete(i))\n .filter(isNotNull);\n\n if (forDeleting.length === 0) return;\n\n findIdentifiers(forDeleting).forEach((identifier) => {\n referenced.add(identifier);\n });\n\n removeWithRelated(forDeleting);\n });\n\n const result = [...referenced];\n result.sort((a, b) => a.node?.name.localeCompare(b.node?.name));\n\n return result;\n}\n\nfunction removeWithRelated(paths: NodePath[]) {\n if (paths.length === 0) return;\n\n const rootPath = getScope(paths[0]).getProgramParent()\n .path as NodePath<Program>;\n\n if (!fixed.has(rootPath)) {\n // Some libraries don't care about bindings, references, and other staff\n // So we have to fix the scope before we can detect unused code\n referenceEnums(rootPath);\n fixed.add(rootPath);\n }\n\n let clean = false;\n let referencedIdentifiers: NodePath<Identifier | JSXIdentifier>[] = [];\n const declared: Binding[] = [];\n\n paths.forEach((path) => {\n const deletingPath = findParentForDelete(path);\n if (!deletingPath) return;\n\n referencedIdentifiers.push(\n ...findIdentifiers([deletingPath], 'referenced')\n );\n declared.push(\n ...findIdentifiers([deletingPath], 'binding').map(\n (i) => getScope(i).getBinding(i.node.name)!\n )\n );\n\n mutate(deletingPath, (p) => {\n if (!isRemoved(p)) p.remove();\n });\n });\n\n if (declared.length > 0) {\n removeWithRelated(\n declared.reduce(\n (acc, i) => [...acc, ...i.referencePaths.filter(nonType)],\n [] as NodePath[]\n )\n );\n }\n\n referencedIdentifiers.sort((a, b) =>\n a.node?.name.localeCompare(b.node?.name)\n );\n\n while (!clean && referencedIdentifiers.length > 0) {\n const referenced = removeUnreferenced(referencedIdentifiers);\n clean =\n referenced.map((i) => i.node?.name).join('|') ===\n referencedIdentifiers.map((i) => i.node?.name).join('|');\n referencedIdentifiers = referenced;\n }\n}\n\nfunction mutate<T extends NodePath>(path: T, fn: (p: T) => NodePath[] | void) {\n const dereferenced = dereferenceAll(path);\n\n const mutated = fn(path);\n\n referenceAll(path);\n mutated?.forEach((p) => referenceAll(p));\n\n const dead = dereferenced.filter((p) => !isReferenced(p));\n\n const forDeleting: NodePath[] = [];\n dead.forEach((binding) => {\n const assignments = [binding.path, ...binding.constantViolations];\n assignments.forEach((assignment) => {\n const { scope } = assignment;\n const declared = Object.values(\n assignment.getOuterBindingIdentifiers(false)\n );\n if (\n declared.length === 1 &&\n 'name' in declared[0] &&\n declared[0].name === binding.identifier.name\n ) {\n // Only one identifier is declared, so we can remove the whole declaration\n forDeleting.push(assignment);\n return;\n }\n\n if (\n declared.every(\n (identifier) =>\n identifier.type === 'Identifier' &&\n !scope.getBinding(identifier.name)?.referenced\n )\n ) {\n // No other identifier is referenced, so we can remove the whole declaration\n forDeleting.push(assignment);\n return;\n }\n\n // We can't remove the binding, but we can remove the part of it\n assignment.traverse({\n Identifier(identifier) {\n if (identifier.node.name === binding.identifier.name) {\n const parent = identifier.parentPath;\n if (\n parent.isArrayPattern() &&\n identifier.listKey === 'elements' &&\n typeof identifier.key === 'number'\n ) {\n parent.node.elements[identifier.key] = null;\n } else if (parent.isObjectProperty()) {\n forDeleting.push(parent);\n }\n }\n },\n });\n });\n });\n\n removeWithRelated(forDeleting);\n}\n\nexport { mutate, removeWithRelated };\n"],"mappings":"AAAA;;AACA;AAKA,OAAOA,eAAP,IAA0BC,OAA1B,QAAyC,mBAAzC;AACA,SAASC,QAAT,QAAyB,YAAzB;AACA,OAAOC,SAAP,MAAsB,aAAtB;AACA,OAAOC,SAAP,MAAsB,aAAtB;;AAEA,SAASC,UAAT,CAAoBC,IAApB,EAAgE;EAC9D,MAAMC,OAAO,GAAGL,QAAQ,CAACI,IAAD,CAAR,CAAeD,UAAf,CAA0BC,IAAI,CAACE,IAAL,CAAUC,IAApC,CAAhB;;EACA,IAAI,CAACF,OAAL,EAAc;IACZ,OAAOG,SAAP;EACD;;EAED,OAAOH,OAAP;AACD;;AAED,OAAO,SAASI,SAAT,CACLL,IADK,EAELM,aAAuB,GAAGN,IAFrB,EAGLO,KAAK,GAAG,KAHH,EAIC;EACN,IAAI,CAACA,KAAD,IAAU,CAACP,IAAI,CAACQ,sBAAL,EAAf,EAA8C;EAE9C,MAAMP,OAAO,GAAGF,UAAU,CAACC,IAAD,CAA1B;EACA,IAAI,CAACC,OAAL,EAAc;;EAEd,IAAIA,OAAO,CAACQ,cAAR,CAAuBC,QAAvB,CAAgCJ,aAAhC,CAAJ,EAAoD;IAClD;EACD;;EAEDL,OAAO,CAACU,UAAR,GAAqB,IAArB;EACAV,OAAO,CAACW,UAAR,IAAsB,CAAtB;EACAX,OAAO,CAACQ,cAAR,CAAuBI,IAAvB,CAA4BP,aAAa,IAAIN,IAA7C;AACD;;AAED,SAASc,YAAT,CAAsBb,OAAtB,EAAwC;EACtC,IAAI,CAACA,OAAO,CAACU,UAAb,EAAyB;IACvB,OAAO,KAAP;EACD,CAHqC,CAKtC;EACA;;;EACA,IAAKV,OAAO,CAACc,IAAT,KAA6B,OAAjC,EAA0C;IACxC,OAAO,IAAP;EACD,CATqC,CAWtC;;;EACA,OAAOd,OAAO,CAACQ,cAAR,CAAuBO,IAAvB,CACJC,CAAD,IAAO,CAACA,CAAC,CAACC,IAAF,CAAQC,QAAD,IAAcA,QAAQ,CAACC,QAAT,MAAuBD,QAAQ,CAACE,UAAT,EAA5C,CADH,CAAP;AAGD;;AAED,OAAO,SAASC,WAAT,CACLtB,IADK,EAEW;EAChB,MAAMC,OAAO,GAAGF,UAAU,CAACC,IAAD,CAA1B;EACA,IAAI,CAACC,OAAL,EAAc,OAAO,IAAP;;EAEd,IAAI,CAACA,OAAO,CAACQ,cAAR,CAAuBC,QAAvB,CAAgCV,IAAhC,CAAL,EAA4C;IAC1C,OAAO,IAAP;EACD;;EAEDC,OAAO,CAACW,UAAR,IAAsB,CAAtB;EACAX,OAAO,CAACQ,cAAR,GAAyBR,OAAO,CAACQ,cAAR,CAAuBc,MAAvB,CAA+BN,CAAD,IAAOA,CAAC,KAAKjB,IAA3C,CAAzB;EACAC,OAAO,CAACU,UAAR,GAAqBV,OAAO,CAACQ,cAAR,CAAuBe,MAAvB,GAAgC,CAArD;EAEA,OAAOvB,OAAP;AACD;;AAED,SAASwB,cAAT,CAAwBzB,IAAxB,EAAmD;EACjD,OAAON,eAAe,CAAC,CAACM,IAAD,CAAD,CAAf,CACJ0B,GADI,CACCC,cAAD,IAAoBL,WAAW,CAACK,cAAD,CAD/B,EAEJJ,MAFI,CAEG1B,SAFH,CAAP;AAGD;;AAED,OAAO,SAAS+B,YAAT,CAAsB5B,IAAtB,EAA4C;EACjDN,eAAe,CAAC,CAACM,IAAD,CAAD,CAAf,CAAwB6B,OAAxB,CAAiCF,cAAD,IAC9BtB,SAAS,CAACsB,cAAD,CADX;AAGD;AAED,MAAMG,aAAa,GAAG,IAAIC,OAAJ,EAAtB;AAEA,OAAO,SAASC,mBAAT,CAA6BhC,IAA7B,EAA8D;EACnE,IAAIF,SAAS,CAACE,IAAD,CAAb,EAAqB,OAAO,IAAP;EAErB8B,aAAa,CAACG,GAAd,CAAkBjC,IAAlB;EAEA,MAAMkC,MAAM,GAAGlC,IAAI,CAACmC,UAApB;EAEA,IAAI,CAACD,MAAL,EAAa,OAAOlC,IAAP;;EAEb,IAAIkC,MAAM,CAACE,SAAP,EAAJ,EAAwB;IACtB;IACA,OAAOpC,IAAP;EACD;;EAED,IAAIkC,MAAM,CAACG,mBAAP,CAA2B;IAAEC,QAAQ,EAAE;EAAZ,CAA3B,CAAJ,EAAoD;IAClDC,MAAM,CAACL,MAAD,EAAUM,CAAD,IAAO;MACpBA,CAAC,CAACC,WAAF,CAAc;QACZC,IAAI,EAAE,gBADM;QAEZC,KAAK,EAAE;MAFK,CAAd;IAID,CALK,CAAN;IAOA,OAAO,IAAP;EACD;;EAED,IAAIT,MAAM,CAACU,gBAAP,EAAJ,EAA+B;IAC7B;IACA,MAAMC,GAAG,GAAGX,MAAM,CAACY,GAAP,CAAW,KAAX,CAAZ;;IACA,IAAID,GAAG,CAACE,YAAJ,CAAiB;MAAE5C,IAAI,EAAE;IAAR,CAAjB,CAAJ,EAAuC;MACrC,MAAM6C,mBAAmB,GAAGd,MAAM,CAACC,UAAP,CAAkBA,UAA9C;;MACA,IACEa,mBAAmB,EAAEC,gBAArB,MACAD,mBAAmB,CAChBF,GADH,CACO,QADP,EAEGI,cAFH,CAEkB,uBAFlB,CAFF,EAKE;QACA,OAAOlB,mBAAmB,CAACgB,mBAAD,CAA1B;MACD;IACF;;IAED,OAAOhB,mBAAmB,CAACE,MAAD,CAA1B;EACD;;EAED,IAAIA,MAAM,CAACiB,iBAAP,EAAJ,EAAgC;IAC9BZ,MAAM,CAACvC,IAAD,EAAQwC,CAAD,IAAO;MAClBA,CAAC,CAACC,WAAF,CAAc;QACZC,IAAI,EAAE,eADM;QAEZC,KAAK,EAAE;MAFK,CAAd;IAID,CALK,CAAN;IAMA,OAAO,IAAP;EACD;;EAED,IAAIT,MAAM,CAACkB,sBAAP,EAAJ,EAAqC;IACnC,OAAOpB,mBAAmB,CAACE,MAAD,CAA1B;EACD;;EAED,IAAIA,MAAM,CAACe,gBAAP,EAAJ,EAA+B;IAC7B,OAAOjB,mBAAmB,CAACE,MAAD,CAA1B;EACD;;EAED,IAAIA,MAAM,CAACmB,gBAAP,CAAwB;IAAEC,IAAI,EAAEtD,IAAI,CAACE;EAAb,CAAxB,CAAJ,EAAkD;IAChD,OAAO8B,mBAAmB,CAACE,MAAD,CAA1B;EACD;;EAED,IACEA,MAAM,CAACqB,oBAAP,CAA4B;IAAEC,IAAI,EAAExD,IAAI,CAACE;EAAb,CAA5B,KACAgC,MAAM,CAACuB,qBAAP,EADA,IAEAvB,MAAM,CAACwB,cAAP,EAFA,IAGAxB,MAAM,CAACyB,aAAP,EAJF,EAKE;IACA,OAAO3B,mBAAmB,CAACE,MAAD,CAA1B;EACD;;EAED,IAAIA,MAAM,CAAC0B,gBAAP,EAAJ,EAA+B;IAC7B,MAAMJ,IAAI,GAAGtB,MAAM,CAACY,GAAP,CAAW,MAAX,CAAb;;IACA,IAAIU,IAAI,CAAChC,MAAL,KAAgB,CAApB,EAAuB;MACrB,OAAOQ,mBAAmB,CAACE,MAAD,CAA1B;IACD;;IAED,IAAIlC,IAAI,CAAC6D,OAAL,KAAiB,MAAjB,IAA2B,OAAO7D,IAAI,CAAC6C,GAAZ,KAAoB,QAAnD,EAA6D;MAC3D,IAAI7C,IAAI,CAAC6C,GAAL,GAAW,CAAf,EAAkB;QAChB;QACA,MAAMiB,aAAa,GAAGN,IAAI,CAACxD,IAAI,CAAC6C,GAAL,GAAW,CAAZ,CAA1B;;QACA,IACEiB,aAAa,CAACC,aAAd,MACAD,aAAa,CAAChB,GAAd,CAAkB,YAAlB,EAAgCkB,iBAAhC,EAFF,EAGE;UACA;UACA,OAAOhC,mBAAmB,CAAC8B,aAAD,CAA1B;QACD;MACF,CAVD,MAUO,IACLN,IAAI,CAACS,KAAL,CAAW,CAAX,EAAcC,KAAd,CAAqBC,SAAD,IAAerC,aAAa,CAACsC,GAAd,CAAkBD,SAAlB,CAAnC,CADK,EAEL;QACA;QACA;QACA,OAAOnC,mBAAmB,CAACE,MAAD,CAA1B;MACD;IACF;EACF;;EAED,IAAIA,MAAM,CAACmC,oBAAP,EAAJ,EAAmC;IACjC,OAAOrC,mBAAmB,CAACE,MAAD,CAA1B;EACD;;EAED,IACEA,MAAM,CAACoC,wBAAP,OACEpC,MAAM,CAAChC,IAAP,CAAYqE,UAAZ,CAAuB/C,MAAvB,KAAkC,CAAlC,IACAU,MAAM,CAAChC,IAAP,CAAYqE,UAAZ,CAAuB,CAAvB,MAA8BvE,IAAI,CAACE,IADpC,IAECgC,MAAM,CAAChC,IAAP,CAAYsE,WAAZ,KAA4BxE,IAAI,CAACE,IAHnC,CADF,EAKE;IACA,OAAO8B,mBAAmB,CAACE,MAAD,CAA1B;EACD;;EAED,IAAIA,MAAM,CAACuC,0BAAP,EAAJ,EAAyC;IACvC,OAAOzC,mBAAmB,CAACE,MAAD,CAA1B;EACD;;EAED,IAAIA,MAAM,CAACwC,cAAP,EAAJ,EAA6B;IAC3B,OAAO1C,mBAAmB,CAACE,MAAD,CAA1B;EACD;;EAED,IAAIA,MAAM,CAACyC,iBAAP,EAAJ,EAAgC;IAC9B,OAAO3C,mBAAmB,CAACE,MAAD,CAA1B;EACD;;EAED,IAAIA,MAAM,CAAC0C,uBAAP,EAAJ,EAAsC;IACpC,OAAO5C,mBAAmB,CAACE,MAAD,CAA1B;EACD;;EAED,KAAK,MAAMW,GAAX,IAAkB,CAAC,MAAD,EAAS,cAAT,EAAyB,YAAzB,CAAlB,EAA0D;IACxD,IAAI7C,IAAI,CAAC6D,OAAL,KAAiBhB,GAAjB,IAAwB,OAAO7C,IAAI,CAAC6C,GAAZ,KAAoB,QAAhD,EAA0D;MACxD,MAAMgC,IAAI,GAAG3C,MAAM,CAACY,GAAP,CAAWD,GAAX,CAAb;;MACA,IAAIgC,IAAI,CAACrD,MAAL,KAAgB,CAApB,EAAuB;QACrB,OAAOQ,mBAAmB,CAACE,MAAD,CAA1B;MACD;IACF;EACF;;EAED,KAAK,MAAMW,GAAX,IAAkB,CAChB,UADgB,EAEhB,OAFgB,EAGhB,MAHgB,EAIhB,QAJgB,EAKhB,cALgB,EAMhB,YANgB,EAOhB,IAPgB,EAQhB,MARgB,EAShB,QATgB,EAUhB,UAVgB,EAWhB,OAXgB,EAYhB,MAZgB,CAAlB,EAaG;IACD,IAAI7C,IAAI,CAAC6C,GAAL,KAAaA,GAAb,IAAoBX,MAAM,CAACY,GAAP,CAAWD,GAAX,MAAoB7C,IAA5C,EAAkD;MAChD,OAAOgC,mBAAmB,CAACE,MAAD,CAA1B;IACD;EACF;;EAED,OAAOlC,IAAP;AACD,C,CAED;;AACA,SAAS8E,cAAT,CAAwBC,OAAxB,EAAoD;EAClD;AACF;AACA;AACA;AACA;AACA;EACEA,OAAO,CAACC,QAAR,CAAiB;IACfC,mBAAmB,CAACC,mBAAD,EAAsB;MACvC,MAAMC,UAAU,GAAGD,mBAAmB,CAACpC,GAApB,CAAwB,YAAxB,CAAnB;MACA,IAAI,CAACqC,UAAU,CAAClC,gBAAX,EAAL,EAAoC;MAEpC,MAAMmC,MAAM,GAAGD,UAAU,CAACrC,GAAX,CAAe,QAAf,CAAf;MACA,MAAMuC,IAAI,GAAGF,UAAU,CAACrC,GAAX,CAAe,WAAf,CAAb;MACA,IAAI,CAACsC,MAAM,CAAC7B,oBAAP,EAAD,IAAkC8B,IAAI,CAAC7D,MAAL,KAAgB,CAAtD,EAAyD;MACzD,MAAM,CAAC8D,GAAD,IAAQD,IAAd;;MACA,IAAIC,GAAG,CAACjD,mBAAJ,CAAwB;QAAEC,QAAQ,EAAE;MAAZ,CAAxB,CAAJ,EAAiD;QAC/CV,YAAY,CAAC0D,GAAD,CAAZ;MACD;IACF;;EAZc,CAAjB;AAcD;;AAED,MAAMC,KAAK,GAAG,IAAIxD,OAAJ,EAAd;;AAEA,SAASyD,kBAAT,CAA4BC,KAA5B,EAA2E;EACzE,MAAM9E,UAAU,GAAG,IAAI+E,GAAJ,EAAnB;EACAD,KAAK,CAAC5D,OAAN,CAAe8D,IAAD,IAAU;IACtB,IAAI,CAACA,IAAI,CAACzF,IAAN,IAAcJ,SAAS,CAAC6F,IAAD,CAA3B,EAAmC;IACnC,MAAM1F,OAAO,GAAGL,QAAQ,CAAC+F,IAAD,CAAR,CAAe5F,UAAf,CAA0B4F,IAAI,CAACzF,IAAL,CAAUC,IAApC,CAAhB;IACA,IAAI,CAACF,OAAL,EAAc;IACd,MAAM2F,aAAa,GACjB3F,OAAO,CAACQ,cAAR,CAAuBc,MAAvB,CAA+BN,CAAD,IAAO,CAACnB,SAAS,CAACmB,CAAD,CAA/C,EAAoDO,MAApD,GAA6D,CAD/D;;IAEA,IAAIoE,aAAJ,EAAmB;MACjBjF,UAAU,CAACsB,GAAX,CAAe0D,IAAf;MACA;IACD;;IAED,MAAME,WAAW,GAAG,CAAC5F,OAAO,CAACD,IAAT,EAAe,GAAGC,OAAO,CAAC6F,kBAA1B,EACjBpE,GADiB,CACZT,CAAD,IAAOe,mBAAmB,CAACf,CAAD,CADb,EAEjBM,MAFiB,CAEV1B,SAFU,CAApB;IAIA,IAAIgG,WAAW,CAACrE,MAAZ,KAAuB,CAA3B,EAA8B;IAE9B9B,eAAe,CAACmG,WAAD,CAAf,CAA6BhE,OAA7B,CAAsCkE,UAAD,IAAgB;MACnDpF,UAAU,CAACsB,GAAX,CAAe8D,UAAf;IACD,CAFD;IAIAC,iBAAiB,CAACH,WAAD,CAAjB;EACD,CAtBD;EAwBA,MAAMI,MAAM,GAAG,CAAC,GAAGtF,UAAJ,CAAf;EACAsF,MAAM,CAACC,IAAP,CAAY,CAACC,CAAD,EAAIC,CAAJ,KAAUD,CAAC,CAACjG,IAAF,EAAQC,IAAR,CAAakG,aAAb,CAA2BD,CAAC,CAAClG,IAAF,EAAQC,IAAnC,CAAtB;EAEA,OAAO8F,MAAP;AACD;;AAED,SAASD,iBAAT,CAA2BM,KAA3B,EAA8C;EAC5C,IAAIA,KAAK,CAAC9E,MAAN,KAAiB,CAArB,EAAwB;EAExB,MAAM+E,QAAQ,GAAG3G,QAAQ,CAAC0G,KAAK,CAAC,CAAD,CAAN,CAAR,CAAmBE,gBAAnB,GACdxG,IADH;;EAGA,IAAI,CAACuF,KAAK,CAACnB,GAAN,CAAUmC,QAAV,CAAL,EAA0B;IACxB;IACA;IACAzB,cAAc,CAACyB,QAAD,CAAd;IACAhB,KAAK,CAACtD,GAAN,CAAUsE,QAAV;EACD;;EAED,IAAIE,KAAK,GAAG,KAAZ;EACA,IAAIC,qBAA6D,GAAG,EAApE;EACA,MAAMC,QAAmB,GAAG,EAA5B;EAEAL,KAAK,CAACzE,OAAN,CAAe7B,IAAD,IAAU;IACtB,MAAM4G,YAAY,GAAG5E,mBAAmB,CAAChC,IAAD,CAAxC;IACA,IAAI,CAAC4G,YAAL,EAAmB;IAEnBF,qBAAqB,CAAC7F,IAAtB,CACE,GAAGnB,eAAe,CAAC,CAACkH,YAAD,CAAD,EAAiB,YAAjB,CADpB;IAGAD,QAAQ,CAAC9F,IAAT,CACE,GAAGnB,eAAe,CAAC,CAACkH,YAAD,CAAD,EAAiB,SAAjB,CAAf,CAA2ClF,GAA3C,CACAT,CAAD,IAAOrB,QAAQ,CAACqB,CAAD,CAAR,CAAYlB,UAAZ,CAAuBkB,CAAC,CAACf,IAAF,CAAOC,IAA9B,CADN,CADL;IAMAoC,MAAM,CAACqE,YAAD,EAAgBpE,CAAD,IAAO;MAC1B,IAAI,CAAC1C,SAAS,CAAC0C,CAAD,CAAd,EAAmBA,CAAC,CAACqE,MAAF;IACpB,CAFK,CAAN;EAGD,CAhBD;;EAkBA,IAAIF,QAAQ,CAACnF,MAAT,GAAkB,CAAtB,EAAyB;IACvBwE,iBAAiB,CACfW,QAAQ,CAACG,MAAT,CACE,CAACC,GAAD,EAAM9F,CAAN,KAAY,CAAC,GAAG8F,GAAJ,EAAS,GAAG9F,CAAC,CAACR,cAAF,CAAiBc,MAAjB,CAAwB5B,OAAxB,CAAZ,CADd,EAEE,EAFF,CADe,CAAjB;EAMD;;EAED+G,qBAAqB,CAACR,IAAtB,CAA2B,CAACC,CAAD,EAAIC,CAAJ,KACzBD,CAAC,CAACjG,IAAF,EAAQC,IAAR,CAAakG,aAAb,CAA2BD,CAAC,CAAClG,IAAF,EAAQC,IAAnC,CADF;;EAIA,OAAO,CAACsG,KAAD,IAAUC,qBAAqB,CAAClF,MAAtB,GAA+B,CAAhD,EAAmD;IACjD,MAAMb,UAAU,GAAG6E,kBAAkB,CAACkB,qBAAD,CAArC;IACAD,KAAK,GACH9F,UAAU,CAACe,GAAX,CAAgBT,CAAD,IAAOA,CAAC,CAACf,IAAF,EAAQC,IAA9B,EAAoC6G,IAApC,CAAyC,GAAzC,MACAN,qBAAqB,CAAChF,GAAtB,CAA2BT,CAAD,IAAOA,CAAC,CAACf,IAAF,EAAQC,IAAzC,EAA+C6G,IAA/C,CAAoD,GAApD,CAFF;IAGAN,qBAAqB,GAAG/F,UAAxB;EACD;AACF;;AAED,SAAS4B,MAAT,CAAoCvC,IAApC,EAA6CiH,EAA7C,EAA8E;EAC5E,MAAMC,YAAY,GAAGzF,cAAc,CAACzB,IAAD,CAAnC;EAEA,MAAMmH,OAAO,GAAGF,EAAE,CAACjH,IAAD,CAAlB;EAEA4B,YAAY,CAAC5B,IAAD,CAAZ;EACAmH,OAAO,EAAEtF,OAAT,CAAkBW,CAAD,IAAOZ,YAAY,CAACY,CAAD,CAApC;EAEA,MAAM4E,IAAI,GAAGF,YAAY,CAAC3F,MAAb,CAAqBiB,CAAD,IAAO,CAAC1B,YAAY,CAAC0B,CAAD,CAAxC,CAAb;EAEA,MAAMqD,WAAuB,GAAG,EAAhC;EACAuB,IAAI,CAACvF,OAAL,CAAc5B,OAAD,IAAa;IACxB,MAAMoH,WAAW,GAAG,CAACpH,OAAO,CAACD,IAAT,EAAe,GAAGC,OAAO,CAAC6F,kBAA1B,CAApB;IACAuB,WAAW,CAACxF,OAAZ,CAAqByF,UAAD,IAAgB;MAClC,MAAM;QAAEC;MAAF,IAAYD,UAAlB;MACA,MAAMX,QAAQ,GAAGa,MAAM,CAACC,MAAP,CACfH,UAAU,CAACI,0BAAX,CAAsC,KAAtC,CADe,CAAjB;;MAGA,IACEf,QAAQ,CAACnF,MAAT,KAAoB,CAApB,IACA,UAAUmF,QAAQ,CAAC,CAAD,CADlB,IAEAA,QAAQ,CAAC,CAAD,CAAR,CAAYxG,IAAZ,KAAqBF,OAAO,CAAC8F,UAAR,CAAmB5F,IAH1C,EAIE;QACA;QACA0F,WAAW,CAAChF,IAAZ,CAAiByG,UAAjB;QACA;MACD;;MAED,IACEX,QAAQ,CAACzC,KAAT,CACG6B,UAAD,IACEA,UAAU,CAACrD,IAAX,KAAoB,YAApB,IACA,CAAC6E,KAAK,CAACxH,UAAN,CAAiBgG,UAAU,CAAC5F,IAA5B,GAAmCQ,UAHxC,CADF,EAME;QACA;QACAkF,WAAW,CAAChF,IAAZ,CAAiByG,UAAjB;QACA;MACD,CAzBiC,CA2BlC;;;MACAA,UAAU,CAACtC,QAAX,CAAoB;QAClB2C,UAAU,CAAC5B,UAAD,EAAa;UACrB,IAAIA,UAAU,CAAC7F,IAAX,CAAgBC,IAAhB,KAAyBF,OAAO,CAAC8F,UAAR,CAAmB5F,IAAhD,EAAsD;YACpD,MAAM+B,MAAM,GAAG6D,UAAU,CAAC5D,UAA1B;;YACA,IACED,MAAM,CAAC0F,cAAP,MACA7B,UAAU,CAAClC,OAAX,KAAuB,UADvB,IAEA,OAAOkC,UAAU,CAAClD,GAAlB,KAA0B,QAH5B,EAIE;cACAX,MAAM,CAAChC,IAAP,CAAY2H,QAAZ,CAAqB9B,UAAU,CAAClD,GAAhC,IAAuC,IAAvC;YACD,CAND,MAMO,IAAIX,MAAM,CAACU,gBAAP,EAAJ,EAA+B;cACpCiD,WAAW,CAAChF,IAAZ,CAAiBqB,MAAjB;YACD;UACF;QACF;;MAdiB,CAApB;IAgBD,CA5CD;EA6CD,CA/CD;EAiDA8D,iBAAiB,CAACH,WAAD,CAAjB;AACD;;AAED,SAAStD,MAAT,EAAiByD,iBAAjB"}
import { types as t } from '@babel/core';
import { getScope } from '../getScope';
import { mutate } from '../scopeHelpers';

@@ -17,3 +18,3 @@

const functionScope = path.scope.getFunctionParent();
const functionScope = getScope(path).getFunctionParent();
const scopePath = functionScope?.path;

@@ -20,0 +21,0 @@

@@ -1,1 +0,1 @@

{"version":3,"file":"JSXElementsRemover.js","names":["types","t","mutate","getFunctionName","path","isClassMethod","isIdentifier","node","key","name","JSXElementsRemover","nullLiteral","functionScope","scope","getFunctionParent","scopePath","isFunction","emptyBody","blockStatement","returnStatement","decl","findParent","p","isClassDeclaration","replaceWith","functionDeclaration","id","body","get","Array","isArray","Error","params"],"sources":["../../src/visitors/JSXElementsRemover.ts"],"sourcesContent":["import { types as t } from '@babel/core';\nimport type { NodePath } from '@babel/traverse';\nimport type {\n CallExpression,\n Function as FunctionNode,\n JSX,\n} from '@babel/types';\n\nimport { mutate } from '../scopeHelpers';\n\nfunction getFunctionName(path: NodePath<FunctionNode>): string | null {\n if (path.isClassMethod() && t.isIdentifier(path.node.key)) {\n return path.node.key.name;\n }\n\n return null;\n}\n\nexport default function JSXElementsRemover(\n path: NodePath<JSX | CallExpression>\n) {\n // JSX can be safely replaced with null because it is unnecessary for styles\n const nullLiteral = t.nullLiteral();\n\n // We can do even more\n // If that JSX is a result of a function, we can replace the function body.\n const functionScope = path.scope.getFunctionParent();\n const scopePath = functionScope?.path;\n if (scopePath?.isFunction()) {\n const emptyBody = t.blockStatement([t.returnStatement(nullLiteral)]);\n\n // Is it not just a function, but a method `render`?\n if (getFunctionName(scopePath) === 'render') {\n const decl = scopePath.findParent((p) => p.isClassDeclaration());\n\n // Replace the whole component\n if (decl?.isClassDeclaration()) {\n mutate(decl, (p) => {\n p.replaceWith(t.functionDeclaration(decl.node.id, [], emptyBody));\n });\n\n return;\n }\n }\n\n const body = scopePath.get('body');\n if (Array.isArray(body)) {\n throw new Error(\n \"A body of a function is expected to be a single element but an array was returned. It's possible if JS syntax has been changed since that code was written.\"\n );\n }\n\n const node: typeof scopePath.node = {\n ...scopePath.node,\n body: emptyBody,\n params: [],\n };\n\n mutate(scopePath, (p) => {\n p.replaceWith(node);\n });\n } else {\n mutate(path, (p) => {\n p.replaceWith(nullLiteral);\n });\n }\n}\n"],"mappings":"AAAA,SAASA,KAAK,IAAIC,CAAlB,QAA2B,aAA3B;AAQA,SAASC,MAAT,QAAuB,iBAAvB;;AAEA,SAASC,eAAT,CAAyBC,IAAzB,EAAsE;EACpE,IAAIA,IAAI,CAACC,aAAL,MAAwBJ,CAAC,CAACK,YAAF,CAAeF,IAAI,CAACG,IAAL,CAAUC,GAAzB,CAA5B,EAA2D;IACzD,OAAOJ,IAAI,CAACG,IAAL,CAAUC,GAAV,CAAcC,IAArB;EACD;;EAED,OAAO,IAAP;AACD;;AAED,eAAe,SAASC,kBAAT,CACbN,IADa,EAEb;EACA;EACA,MAAMO,WAAW,GAAGV,CAAC,CAACU,WAAF,EAApB,CAFA,CAIA;EACA;;EACA,MAAMC,aAAa,GAAGR,IAAI,CAACS,KAAL,CAAWC,iBAAX,EAAtB;EACA,MAAMC,SAAS,GAAGH,aAAa,EAAER,IAAjC;;EACA,IAAIW,SAAS,EAAEC,UAAX,EAAJ,EAA6B;IAC3B,MAAMC,SAAS,GAAGhB,CAAC,CAACiB,cAAF,CAAiB,CAACjB,CAAC,CAACkB,eAAF,CAAkBR,WAAlB,CAAD,CAAjB,CAAlB,CAD2B,CAG3B;;IACA,IAAIR,eAAe,CAACY,SAAD,CAAf,KAA+B,QAAnC,EAA6C;MAC3C,MAAMK,IAAI,GAAGL,SAAS,CAACM,UAAV,CAAsBC,CAAD,IAAOA,CAAC,CAACC,kBAAF,EAA5B,CAAb,CAD2C,CAG3C;;MACA,IAAIH,IAAI,EAAEG,kBAAN,EAAJ,EAAgC;QAC9BrB,MAAM,CAACkB,IAAD,EAAQE,CAAD,IAAO;UAClBA,CAAC,CAACE,WAAF,CAAcvB,CAAC,CAACwB,mBAAF,CAAsBL,IAAI,CAACb,IAAL,CAAUmB,EAAhC,EAAoC,EAApC,EAAwCT,SAAxC,CAAd;QACD,CAFK,CAAN;QAIA;MACD;IACF;;IAED,MAAMU,IAAI,GAAGZ,SAAS,CAACa,GAAV,CAAc,MAAd,CAAb;;IACA,IAAIC,KAAK,CAACC,OAAN,CAAcH,IAAd,CAAJ,EAAyB;MACvB,MAAM,IAAII,KAAJ,CACJ,6JADI,CAAN;IAGD;;IAED,MAAMxB,IAA2B,GAAG,EAClC,GAAGQ,SAAS,CAACR,IADqB;MAElCoB,IAAI,EAAEV,SAF4B;MAGlCe,MAAM,EAAE;IAH0B,CAApC;IAMA9B,MAAM,CAACa,SAAD,EAAaO,CAAD,IAAO;MACvBA,CAAC,CAACE,WAAF,CAAcjB,IAAd;IACD,CAFK,CAAN;EAGD,CAjCD,MAiCO;IACLL,MAAM,CAACE,IAAD,EAAQkB,CAAD,IAAO;MAClBA,CAAC,CAACE,WAAF,CAAcb,WAAd;IACD,CAFK,CAAN;EAGD;AACF"}
{"version":3,"file":"JSXElementsRemover.js","names":["types","t","getScope","mutate","getFunctionName","path","isClassMethod","isIdentifier","node","key","name","JSXElementsRemover","nullLiteral","functionScope","getFunctionParent","scopePath","isFunction","emptyBody","blockStatement","returnStatement","decl","findParent","p","isClassDeclaration","replaceWith","functionDeclaration","id","body","get","Array","isArray","Error","params"],"sources":["../../src/visitors/JSXElementsRemover.ts"],"sourcesContent":["import { types as t } from '@babel/core';\nimport type { NodePath } from '@babel/traverse';\nimport type {\n CallExpression,\n Function as FunctionNode,\n JSX,\n} from '@babel/types';\n\nimport { getScope } from '../getScope';\nimport { mutate } from '../scopeHelpers';\n\nfunction getFunctionName(path: NodePath<FunctionNode>): string | null {\n if (path.isClassMethod() && t.isIdentifier(path.node.key)) {\n return path.node.key.name;\n }\n\n return null;\n}\n\nexport default function JSXElementsRemover(\n path: NodePath<JSX | CallExpression>\n) {\n // JSX can be safely replaced with null because it is unnecessary for styles\n const nullLiteral = t.nullLiteral();\n\n // We can do even more\n // If that JSX is a result of a function, we can replace the function body.\n const functionScope = getScope(path).getFunctionParent();\n const scopePath = functionScope?.path;\n if (scopePath?.isFunction()) {\n const emptyBody = t.blockStatement([t.returnStatement(nullLiteral)]);\n\n // Is it not just a function, but a method `render`?\n if (getFunctionName(scopePath) === 'render') {\n const decl = scopePath.findParent((p) => p.isClassDeclaration());\n\n // Replace the whole component\n if (decl?.isClassDeclaration()) {\n mutate(decl, (p) => {\n p.replaceWith(t.functionDeclaration(decl.node.id, [], emptyBody));\n });\n\n return;\n }\n }\n\n const body = scopePath.get('body');\n if (Array.isArray(body)) {\n throw new Error(\n \"A body of a function is expected to be a single element but an array was returned. It's possible if JS syntax has been changed since that code was written.\"\n );\n }\n\n const node: typeof scopePath.node = {\n ...scopePath.node,\n body: emptyBody,\n params: [],\n };\n\n mutate(scopePath, (p) => {\n p.replaceWith(node);\n });\n } else {\n mutate(path, (p) => {\n p.replaceWith(nullLiteral);\n });\n }\n}\n"],"mappings":"AAAA,SAASA,KAAK,IAAIC,CAAlB,QAA2B,aAA3B;AAQA,SAASC,QAAT,QAAyB,aAAzB;AACA,SAASC,MAAT,QAAuB,iBAAvB;;AAEA,SAASC,eAAT,CAAyBC,IAAzB,EAAsE;EACpE,IAAIA,IAAI,CAACC,aAAL,MAAwBL,CAAC,CAACM,YAAF,CAAeF,IAAI,CAACG,IAAL,CAAUC,GAAzB,CAA5B,EAA2D;IACzD,OAAOJ,IAAI,CAACG,IAAL,CAAUC,GAAV,CAAcC,IAArB;EACD;;EAED,OAAO,IAAP;AACD;;AAED,eAAe,SAASC,kBAAT,CACbN,IADa,EAEb;EACA;EACA,MAAMO,WAAW,GAAGX,CAAC,CAACW,WAAF,EAApB,CAFA,CAIA;EACA;;EACA,MAAMC,aAAa,GAAGX,QAAQ,CAACG,IAAD,CAAR,CAAeS,iBAAf,EAAtB;EACA,MAAMC,SAAS,GAAGF,aAAa,EAAER,IAAjC;;EACA,IAAIU,SAAS,EAAEC,UAAX,EAAJ,EAA6B;IAC3B,MAAMC,SAAS,GAAGhB,CAAC,CAACiB,cAAF,CAAiB,CAACjB,CAAC,CAACkB,eAAF,CAAkBP,WAAlB,CAAD,CAAjB,CAAlB,CAD2B,CAG3B;;IACA,IAAIR,eAAe,CAACW,SAAD,CAAf,KAA+B,QAAnC,EAA6C;MAC3C,MAAMK,IAAI,GAAGL,SAAS,CAACM,UAAV,CAAsBC,CAAD,IAAOA,CAAC,CAACC,kBAAF,EAA5B,CAAb,CAD2C,CAG3C;;MACA,IAAIH,IAAI,EAAEG,kBAAN,EAAJ,EAAgC;QAC9BpB,MAAM,CAACiB,IAAD,EAAQE,CAAD,IAAO;UAClBA,CAAC,CAACE,WAAF,CAAcvB,CAAC,CAACwB,mBAAF,CAAsBL,IAAI,CAACZ,IAAL,CAAUkB,EAAhC,EAAoC,EAApC,EAAwCT,SAAxC,CAAd;QACD,CAFK,CAAN;QAIA;MACD;IACF;;IAED,MAAMU,IAAI,GAAGZ,SAAS,CAACa,GAAV,CAAc,MAAd,CAAb;;IACA,IAAIC,KAAK,CAACC,OAAN,CAAcH,IAAd,CAAJ,EAAyB;MACvB,MAAM,IAAII,KAAJ,CACJ,6JADI,CAAN;IAGD;;IAED,MAAMvB,IAA2B,GAAG,EAClC,GAAGO,SAAS,CAACP,IADqB;MAElCmB,IAAI,EAAEV,SAF4B;MAGlCe,MAAM,EAAE;IAH0B,CAApC;IAMA7B,MAAM,CAACY,SAAD,EAAaO,CAAD,IAAO;MACvBA,CAAC,CAACE,WAAF,CAAchB,IAAd;IACD,CAFK,CAAN;EAGD,CAjCD,MAiCO;IACLL,MAAM,CAACE,IAAD,EAAQiB,CAAD,IAAO;MAClBA,CAAC,CAACE,WAAF,CAAcZ,WAAd;IACD,CAFK,CAAN;EAGD;AACF"}

@@ -11,2 +11,4 @@ "use strict";

var _getScope = require("./getScope");
var _isExports = _interopRequireDefault(require("./isExports"));

@@ -570,3 +572,3 @@

const binding = local.scope.getBinding(local.node.name);
const binding = (0, _getScope.getScope)(local).getBinding(local.node.name);

@@ -573,0 +575,0 @@ if (!(binding !== null && binding !== void 0 && binding.referenced)) {

@@ -1,1 +0,1 @@

{"version":3,"file":"collectExportsAndImports.js","names":["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","isTypedNode","map","key","isIdentifier","isNotNull","reverse","what","as","isRestElement","argument","importFromVariableDeclarator","isSync","id","warn","isObjectPattern","exportFromVariableDeclarator","init","isExpression","exported","destructed","collectFromDynamicImport","callExpression","isCallExpression","sourcePath","isStringLiteral","container","isAwaited","isAwaitExpression","isVariableDeclarator","prop","getImportTypeByInteropFunction","callee","undefined","startsWith","collectFromRequire","isRequire","variableDeclarator","unfolded","isMemberExpression","property","isExpressionStatement","isChainOfVoidAssignment","right","isUnaryExpression","operator","isAssignmentExpression","getGetterValueFromDescriptor","descriptor","getter","find","isFunctionExpression","returnStatement","isReturnStatement","collectFromExports","isExports","object","memberExpression","exportName","saveRef","exportRefs","has","set","assignmentExpression","left","exports","matchesPattern","obj","isObjectExpression","collectFromRequireOrExports","importItem","binding","scope","getBinding","referenced","referencePath","referencePaths","ancestor","isTSType","isFlowType","computed","isExportSpecifier","collectFromExportAllDeclaration","reexports","collectFromExportSpecifier","isExportDefaultSpecifier","isExportNamespaceSpecifier","collectFromExportNamedDeclaration","declaration","isVariableDeclaration","declarator","isFunctionDeclaration","collectFromExportDefaultDeclaration","cache","WeakMap","collectFromAssignmentExpression","skip","collectFromCallExpression","maybeExportStart","requireCall","collectExportsAndImports","force","Map","AssignmentExpression","CallExpression","ExportAllDeclaration","ExportDefaultDeclaration","ExportNamedDeclaration","ImportDeclaration","Import"],"sources":["../src/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 CallExpression,\n ExportDefaultDeclaration,\n ExportNamedDeclaration,\n ExportSpecifier,\n Identifier,\n Import,\n ImportDeclaration,\n ImportDefaultSpecifier,\n ImportNamespaceSpecifier,\n ImportSpecifier,\n MemberExpression,\n ObjectPattern,\n StringLiteral,\n VariableDeclarator,\n ExportDefaultSpecifier,\n ExportNamespaceSpecifier,\n AssignmentExpression,\n ExportAllDeclaration,\n ObjectExpression,\n Expression,\n} from '@babel/types';\n\nimport { warn } from '@linaria/logger';\n\nimport isExports from './isExports';\nimport isNotNull from './isNotNull';\nimport isRequire from './isRequire';\nimport isTypedNode from './isTypedNode';\n\nexport interface ISideEffectImport {\n imported: null;\n local: NodePath;\n source: string;\n}\n\nexport interface IImport {\n imported: string | 'default' | '*';\n local: NodePath<Identifier | MemberExpression>;\n source: string;\n}\n\nexport interface IExport {\n exported: string | 'default' | '*'; // '*' means re-export all\n local: NodePath;\n}\n\nexport interface IReexport {\n exported: string | 'default' | '*';\n imported: string | 'default' | '*';\n local: NodePath;\n source: string;\n}\n\nexport interface IState {\n exportRefs: Map<string, NodePath<MemberExpression>[]>;\n exports: IExport[];\n imports: (IImport | ISideEffectImport)[];\n reexports: IReexport[];\n}\n\nexport const sideEffectImport = (\n item: IImport | ISideEffectImport\n): item is ISideEffectImport => item.imported === null;\n\nexport const explicitImport = (\n item: IImport | ISideEffectImport\n): item is IImport => item.imported !== null;\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 }];\n },\n\n ImportDefaultSpecifier(\n path: NodePath<ImportDefaultSpecifier>,\n source\n ): IImport[] {\n const local = path.get('local');\n return [{ imported: 'default', local, source }];\n },\n\n ImportNamespaceSpecifier(\n path: NodePath<ImportNamespaceSpecifier>,\n source\n ): IImport[] {\n const local = path.get('local');\n return unfoldNamespaceImport({ imported: '*', local, source });\n },\n};\n\nfunction collectFromImportDeclaration(\n path: NodePath<ImportDeclaration>,\n state: IState\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: null, 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 what: string | '*';\n as: NodePath<Identifier>;\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\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 warn('evaluator:collectExportsAndImports', '`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 warn(\n 'evaluator:collectExportsAndImports:importFromVariableDeclarator',\n 'Unknown type of id',\n id.node.type\n );\n\n return [];\n}\n\nfunction exportFromVariableDeclarator(\n path: NodePath<VariableDeclarator>\n): IExport[] {\n const id = path.get('id');\n const init = path.get('init');\n\n // If there is no init expression, we can ignore this export\n if (!init || !init.isExpression()) return [];\n\n if (id.isIdentifier()) {\n // It is `export const a = 1;`\n return [\n {\n local: init,\n exported: id.node.name,\n },\n ];\n }\n\n if (id.isObjectPattern()) {\n // It is `export const { a, ...rest } = obj;`\n return whatIsDestructed(id).map((destructed) => ({\n local: init,\n exported: destructed.as.node.name,\n }));\n }\n\n // What else it can be?\n warn(\n 'evaluator:collectExportsAndImports:exportFromVariableDeclarator',\n 'Unknown type of id',\n id.node.type\n );\n\n return [];\n}\n\nfunction collectFromDynamicImport(path: NodePath<Import>, state: IState): 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({ imported: prop.what, local: prop.as, source })\n );\n }\n}\n\nfunction getImportTypeByInteropFunction(\n path: NodePath<CallExpression>\n): '*' | 'default' | undefined {\n const callee = path.get('callee');\n if (!callee.isIdentifier()) {\n return undefined;\n }\n\n const { name } = callee.node;\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 ) {\n return '*';\n }\n\n if (name.startsWith('__rest')) {\n return '*';\n }\n\n return undefined;\n}\n\nfunction collectFromRequire(path: NodePath<Identifier>, state: IState): void {\n if (!isRequire(path)) return;\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 = getImportTypeByInteropFunction(container);\n if (!imported) {\n // It's not a transpiled import.\n // TODO: Can we guess that it's a namespace import?\n warn(\n 'evaluator:collectExportsAndImports',\n 'Unknown wrapper of require',\n container.node.callee\n );\n return;\n }\n\n const { parentPath: variableDeclarator } = container;\n if (!variableDeclarator.isVariableDeclarator()) {\n // TODO: Where else it can be?\n warn(\n 'evaluator:collectExportsAndImports',\n 'Unexpected require inside',\n variableDeclarator.node.type\n );\n return;\n }\n\n const id = variableDeclarator.get('id');\n if (!id.isIdentifier()) {\n warn(\n 'evaluator:collectExportsAndImports',\n 'Id should be Identifier',\n variableDeclarator.node.type\n );\n return;\n }\n\n if (imported === '*') {\n const unfolded = unfoldNamespaceImport({\n imported,\n local: id,\n source,\n });\n state.imports.push(...unfolded);\n } else {\n state.imports.push({\n imported,\n local: id,\n source,\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 warn(\n 'evaluator:collectExportsAndImports',\n 'Property should be Identifier or StringLiteral',\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 });\n } else {\n warn(\n 'evaluator:collectExportsAndImports',\n 'Id should be Identifier',\n variableDeclarator.node.type\n );\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 });\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 });\n\n state.imports.push(...unfolded);\n } else {\n state.imports.push({\n imported: prop.what,\n local: prop.as,\n source,\n });\n }\n });\n }\n\n if (container.isExpressionStatement()) {\n // Looks like standalone require\n state.imports.push({\n imported: null,\n local: container,\n source,\n });\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 getGetterValueFromDescriptor(\n descriptor: NodePath<ObjectExpression>\n): NodePath<Expression> | undefined {\n const getter = descriptor\n .get('properties')\n .filter(isTypedNode('ObjectProperty'))\n .find((p) => p.get('key').isIdentifier({ name: 'get' }));\n const value = getter?.get('value');\n if (value?.isFunctionExpression()) {\n const returnStatement = value.get('body').get('body')[0];\n if (returnStatement?.isReturnStatement()) {\n const local = returnStatement.get('argument');\n if (local.isExpression()) {\n return local;\n }\n }\n }\n\n return undefined;\n}\n\nfunction collectFromExports(path: NodePath<Identifier>, state: IState): 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()) {\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 return;\n }\n\n saveRef();\n state.exports.push({ exported: property.node.name, local: 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 prop.node.value !== '__esModule' &&\n descriptor?.isObjectExpression()\n ) {\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 state.exports.push({ exported, local });\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 state.exports.push({ exported: '*', local });\n }\n }\n }\n}\n\nfunction collectFromRequireOrExports(\n path: NodePath<Identifier>,\n state: IState\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 = local.scope.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 (parentPath?.isExportSpecifier()) {\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 warn(\n 'evaluator:collectExportsAndImports:unfoldNamespaceImports',\n 'Unknown reference',\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: IState\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: IState\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 state.exports.push({ local, exported });\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 warn(\n 'evaluator:collectExportsAndImports:collectFromExportSpecifier',\n 'Unprocessed ExportSpecifier',\n path.node.type\n );\n}\n\nfunction collectFromExportNamedDeclaration(\n path: NodePath<ExportNamedDeclaration>,\n state: IState\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 exportFromVariableDeclarator(declarator).forEach((prop) => {\n // What is defined\n state.exports.push(prop);\n });\n });\n }\n\n if (declaration.isFunctionDeclaration()) {\n const id = declaration.get('id');\n if (id.isIdentifier()) {\n state.exports.push({\n exported: id.node.name,\n local: id,\n });\n }\n }\n}\n\nfunction collectFromExportDefaultDeclaration(\n path: NodePath<ExportDefaultDeclaration>,\n state: IState\n): void {\n if (isType(path)) return;\n\n const declaration = path.get('declaration');\n state.exports.push({ exported: 'default', local: declaration });\n}\n\nconst cache = new WeakMap<NodePath, IState>();\n\nfunction collectFromAssignmentExpression(\n path: NodePath<AssignmentExpression>,\n state: IState\n): void {\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 exported = '*'; // maybe\n }\n\n if (!exported) return;\n\n if (!right.isCallExpression() || !isRequire(right.get('callee'))) return;\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 state.reexports.push({\n exported,\n imported: '*',\n local: path,\n source,\n });\n\n path.skip();\n}\n\nfunction collectFromCallExpression(\n path: NodePath<CallExpression>,\n state: IState\n) {\n const maybeExportStart = path.get('callee');\n if (\n !maybeExportStart.isIdentifier() ||\n !maybeExportStart.node.name.startsWith('__exportStar')\n ) {\n return;\n }\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\nexport default function collectExportsAndImports(\n path: NodePath,\n force = false\n): IState {\n const state: IState = {\n exportRefs: new Map(),\n exports: [],\n imports: [],\n reexports: [],\n };\n\n if (!force && cache.has(path)) {\n return cache.get(path) ?? state;\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 },\n state\n );\n\n cache.set(path, state);\n\n return state;\n}\n"],"mappings":"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"}
{"version":3,"file":"collectExportsAndImports.js","names":["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","isTypedNode","map","key","isIdentifier","isNotNull","reverse","what","as","isRestElement","argument","importFromVariableDeclarator","isSync","id","warn","isObjectPattern","exportFromVariableDeclarator","init","isExpression","exported","destructed","collectFromDynamicImport","callExpression","isCallExpression","sourcePath","isStringLiteral","container","isAwaited","isAwaitExpression","isVariableDeclarator","prop","getImportTypeByInteropFunction","callee","undefined","startsWith","collectFromRequire","isRequire","variableDeclarator","unfolded","isMemberExpression","property","isExpressionStatement","isChainOfVoidAssignment","right","isUnaryExpression","operator","isAssignmentExpression","getGetterValueFromDescriptor","descriptor","getter","find","isFunctionExpression","returnStatement","isReturnStatement","collectFromExports","isExports","object","memberExpression","exportName","saveRef","exportRefs","has","set","assignmentExpression","left","exports","matchesPattern","obj","isObjectExpression","collectFromRequireOrExports","importItem","binding","getScope","getBinding","referenced","referencePath","referencePaths","ancestor","isTSType","isFlowType","computed","isExportSpecifier","collectFromExportAllDeclaration","reexports","collectFromExportSpecifier","isExportDefaultSpecifier","isExportNamespaceSpecifier","collectFromExportNamedDeclaration","declaration","isVariableDeclaration","declarator","isFunctionDeclaration","collectFromExportDefaultDeclaration","cache","WeakMap","collectFromAssignmentExpression","skip","collectFromCallExpression","maybeExportStart","requireCall","collectExportsAndImports","force","Map","AssignmentExpression","CallExpression","ExportAllDeclaration","ExportDefaultDeclaration","ExportNamedDeclaration","ImportDeclaration","Import"],"sources":["../src/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 CallExpression,\n ExportDefaultDeclaration,\n ExportNamedDeclaration,\n ExportSpecifier,\n Identifier,\n Import,\n ImportDeclaration,\n ImportDefaultSpecifier,\n ImportNamespaceSpecifier,\n ImportSpecifier,\n MemberExpression,\n ObjectPattern,\n StringLiteral,\n VariableDeclarator,\n ExportDefaultSpecifier,\n ExportNamespaceSpecifier,\n AssignmentExpression,\n ExportAllDeclaration,\n ObjectExpression,\n Expression,\n} from '@babel/types';\n\nimport { warn } from '@linaria/logger';\n\nimport { getScope } from './getScope';\nimport isExports from './isExports';\nimport isNotNull from './isNotNull';\nimport isRequire from './isRequire';\nimport isTypedNode from './isTypedNode';\n\nexport interface ISideEffectImport {\n imported: null;\n local: NodePath;\n source: string;\n}\n\nexport interface IImport {\n imported: string | 'default' | '*';\n local: NodePath<Identifier | MemberExpression>;\n source: string;\n}\n\nexport interface IExport {\n exported: string | 'default' | '*'; // '*' means re-export all\n local: NodePath;\n}\n\nexport interface IReexport {\n exported: string | 'default' | '*';\n imported: string | 'default' | '*';\n local: NodePath;\n source: string;\n}\n\nexport interface IState {\n exportRefs: Map<string, NodePath<MemberExpression>[]>;\n exports: IExport[];\n imports: (IImport | ISideEffectImport)[];\n reexports: IReexport[];\n}\n\nexport const sideEffectImport = (\n item: IImport | ISideEffectImport\n): item is ISideEffectImport => item.imported === null;\n\nexport const explicitImport = (\n item: IImport | ISideEffectImport\n): item is IImport => item.imported !== null;\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 }];\n },\n\n ImportDefaultSpecifier(\n path: NodePath<ImportDefaultSpecifier>,\n source\n ): IImport[] {\n const local = path.get('local');\n return [{ imported: 'default', local, source }];\n },\n\n ImportNamespaceSpecifier(\n path: NodePath<ImportNamespaceSpecifier>,\n source\n ): IImport[] {\n const local = path.get('local');\n return unfoldNamespaceImport({ imported: '*', local, source });\n },\n};\n\nfunction collectFromImportDeclaration(\n path: NodePath<ImportDeclaration>,\n state: IState\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: null, 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 what: string | '*';\n as: NodePath<Identifier>;\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\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 warn('evaluator:collectExportsAndImports', '`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 warn(\n 'evaluator:collectExportsAndImports:importFromVariableDeclarator',\n 'Unknown type of id',\n id.node.type\n );\n\n return [];\n}\n\nfunction exportFromVariableDeclarator(\n path: NodePath<VariableDeclarator>\n): IExport[] {\n const id = path.get('id');\n const init = path.get('init');\n\n // If there is no init expression, we can ignore this export\n if (!init || !init.isExpression()) return [];\n\n if (id.isIdentifier()) {\n // It is `export const a = 1;`\n return [\n {\n local: init,\n exported: id.node.name,\n },\n ];\n }\n\n if (id.isObjectPattern()) {\n // It is `export const { a, ...rest } = obj;`\n return whatIsDestructed(id).map((destructed) => ({\n local: init,\n exported: destructed.as.node.name,\n }));\n }\n\n // What else it can be?\n warn(\n 'evaluator:collectExportsAndImports:exportFromVariableDeclarator',\n 'Unknown type of id',\n id.node.type\n );\n\n return [];\n}\n\nfunction collectFromDynamicImport(path: NodePath<Import>, state: IState): 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({ imported: prop.what, local: prop.as, source })\n );\n }\n}\n\nfunction getImportTypeByInteropFunction(\n path: NodePath<CallExpression>\n): '*' | 'default' | undefined {\n const callee = path.get('callee');\n if (!callee.isIdentifier()) {\n return undefined;\n }\n\n const { name } = callee.node;\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 ) {\n return '*';\n }\n\n if (name.startsWith('__rest')) {\n return '*';\n }\n\n return undefined;\n}\n\nfunction collectFromRequire(path: NodePath<Identifier>, state: IState): void {\n if (!isRequire(path)) return;\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 = getImportTypeByInteropFunction(container);\n if (!imported) {\n // It's not a transpiled import.\n // TODO: Can we guess that it's a namespace import?\n warn(\n 'evaluator:collectExportsAndImports',\n 'Unknown wrapper of require',\n container.node.callee\n );\n return;\n }\n\n const { parentPath: variableDeclarator } = container;\n if (!variableDeclarator.isVariableDeclarator()) {\n // TODO: Where else it can be?\n warn(\n 'evaluator:collectExportsAndImports',\n 'Unexpected require inside',\n variableDeclarator.node.type\n );\n return;\n }\n\n const id = variableDeclarator.get('id');\n if (!id.isIdentifier()) {\n warn(\n 'evaluator:collectExportsAndImports',\n 'Id should be Identifier',\n variableDeclarator.node.type\n );\n return;\n }\n\n if (imported === '*') {\n const unfolded = unfoldNamespaceImport({\n imported,\n local: id,\n source,\n });\n state.imports.push(...unfolded);\n } else {\n state.imports.push({\n imported,\n local: id,\n source,\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 warn(\n 'evaluator:collectExportsAndImports',\n 'Property should be Identifier or StringLiteral',\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 });\n } else {\n warn(\n 'evaluator:collectExportsAndImports',\n 'Id should be Identifier',\n variableDeclarator.node.type\n );\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 });\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 });\n\n state.imports.push(...unfolded);\n } else {\n state.imports.push({\n imported: prop.what,\n local: prop.as,\n source,\n });\n }\n });\n }\n\n if (container.isExpressionStatement()) {\n // Looks like standalone require\n state.imports.push({\n imported: null,\n local: container,\n source,\n });\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 getGetterValueFromDescriptor(\n descriptor: NodePath<ObjectExpression>\n): NodePath<Expression> | undefined {\n const getter = descriptor\n .get('properties')\n .filter(isTypedNode('ObjectProperty'))\n .find((p) => p.get('key').isIdentifier({ name: 'get' }));\n const value = getter?.get('value');\n if (value?.isFunctionExpression()) {\n const returnStatement = value.get('body').get('body')[0];\n if (returnStatement?.isReturnStatement()) {\n const local = returnStatement.get('argument');\n if (local.isExpression()) {\n return local;\n }\n }\n }\n\n return undefined;\n}\n\nfunction collectFromExports(path: NodePath<Identifier>, state: IState): 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()) {\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 return;\n }\n\n saveRef();\n state.exports.push({ exported: property.node.name, local: 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 prop.node.value !== '__esModule' &&\n descriptor?.isObjectExpression()\n ) {\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 state.exports.push({ exported, local });\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 state.exports.push({ exported: '*', local });\n }\n }\n }\n}\n\nfunction collectFromRequireOrExports(\n path: NodePath<Identifier>,\n state: IState\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 (parentPath?.isExportSpecifier()) {\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 warn(\n 'evaluator:collectExportsAndImports:unfoldNamespaceImports',\n 'Unknown reference',\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: IState\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: IState\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 state.exports.push({ local, exported });\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 warn(\n 'evaluator:collectExportsAndImports:collectFromExportSpecifier',\n 'Unprocessed ExportSpecifier',\n path.node.type\n );\n}\n\nfunction collectFromExportNamedDeclaration(\n path: NodePath<ExportNamedDeclaration>,\n state: IState\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 exportFromVariableDeclarator(declarator).forEach((prop) => {\n // What is defined\n state.exports.push(prop);\n });\n });\n }\n\n if (declaration.isFunctionDeclaration()) {\n const id = declaration.get('id');\n if (id.isIdentifier()) {\n state.exports.push({\n exported: id.node.name,\n local: id,\n });\n }\n }\n}\n\nfunction collectFromExportDefaultDeclaration(\n path: NodePath<ExportDefaultDeclaration>,\n state: IState\n): void {\n if (isType(path)) return;\n\n const declaration = path.get('declaration');\n state.exports.push({ exported: 'default', local: declaration });\n}\n\nconst cache = new WeakMap<NodePath, IState>();\n\nfunction collectFromAssignmentExpression(\n path: NodePath<AssignmentExpression>,\n state: IState\n): void {\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 exported = '*'; // maybe\n }\n\n if (!exported) return;\n\n if (!right.isCallExpression() || !isRequire(right.get('callee'))) return;\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 state.reexports.push({\n exported,\n imported: '*',\n local: path,\n source,\n });\n\n path.skip();\n}\n\nfunction collectFromCallExpression(\n path: NodePath<CallExpression>,\n state: IState\n) {\n const maybeExportStart = path.get('callee');\n if (\n !maybeExportStart.isIdentifier() ||\n !maybeExportStart.node.name.startsWith('__exportStar')\n ) {\n return;\n }\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\nexport default function collectExportsAndImports(\n path: NodePath,\n force = false\n): IState {\n const state: IState = {\n exportRefs: new Map(),\n exports: [],\n imports: [],\n reexports: [],\n };\n\n if (!force && cache.has(path)) {\n return cache.get(path) ?? state;\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 },\n state\n );\n\n cache.set(path, state);\n\n return state;\n}\n"],"mappings":"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"}

@@ -8,6 +8,26 @@ "use strict";

exports.nonType = nonType;
var _getScope = require("./getScope");
function isInVoid(path) {
var _path$parentPath$isUn, _path$parentPath;
return (_path$parentPath$isUn = (_path$parentPath = path.parentPath) === null || _path$parentPath === void 0 ? void 0 : _path$parentPath.isUnaryExpression({
operator: 'void'
})) !== null && _path$parentPath$isUn !== void 0 ? _path$parentPath$isUn : false;
}
function isBindingIdentifier(path) {
return path.isBindingIdentifier() && !isInVoid(path);
}
function isReferencedIdentifier(path) {
return path.isReferencedIdentifier() || isInVoid(path);
} // For some reasons, `isBindingIdentifier` returns true for identifiers inside `void` expressions.
const checkers = {
binding: ex => ex.isBindingIdentifier(),
both: ex => ex.isBindingIdentifier() || ex.isReferencedIdentifier(),
referenced: ex => ex.isReferencedIdentifier()
binding: ex => isBindingIdentifier(ex),
both: ex => isBindingIdentifier(ex) || isReferencedIdentifier(ex),
referenced: ex => isReferencedIdentifier(ex)
};

@@ -33,3 +53,3 @@

const binding = path.scope.getBinding(path.node.name);
const binding = (0, _getScope.getScope)(path).getBinding(path.node.name);

@@ -36,0 +56,0 @@ if (!binding) {

@@ -1,1 +0,1 @@

{"version":3,"file":"findIdentifiers.js","names":["checkers","binding","ex","isBindingIdentifier","both","isReferencedIdentifier","referenced","nonType","path","find","p","isTSTypeReference","isTSTypeQuery","isFlowType","isFlowDeclaration","findIdentifiers","expressions","type","identifiers","forEach","emit","node","removed","scope","getBinding","name","isAncestor","push","isIdentifier","isJSXIdentifier","traverse","TSTypeAnnotation","skip","Identifier","JSXIdentifier"],"sources":["../src/findIdentifiers.ts"],"sourcesContent":["import type { NodePath } from '@babel/traverse';\nimport type { Node, Identifier, JSXIdentifier } from '@babel/types';\n\ntype FindType = 'binding' | 'both' | 'referenced';\n\nconst checkers: Record<FindType, (ex: NodePath) => boolean> = {\n binding: (ex) => ex.isBindingIdentifier(),\n both: (ex) => ex.isBindingIdentifier() || ex.isReferencedIdentifier(),\n referenced: (ex) => ex.isReferencedIdentifier(),\n};\n\nexport function nonType(path: NodePath): boolean {\n return !path.find(\n (p) =>\n p.isTSTypeReference() ||\n p.isTSTypeQuery() ||\n p.isFlowType() ||\n p.isFlowDeclaration()\n );\n}\n\nexport default function findIdentifiers(\n expressions: NodePath<Node | null | undefined>[],\n type: FindType = 'referenced'\n): NodePath<Identifier | JSXIdentifier>[] {\n const identifiers: NodePath<Identifier | JSXIdentifier>[] = [];\n\n expressions.forEach((ex) => {\n const emit = (path: NodePath<Identifier | JSXIdentifier>) => {\n if (!path.node || path.removed || !checkers[type](path)) {\n return;\n }\n\n if (!nonType(path)) {\n // If skip in TSTypeAnnotation visitor doesn't work\n return;\n }\n\n // TODO: Is there a better way to check that it's a local variable?\n\n const binding = path.scope.getBinding(path.node.name);\n if (!binding) {\n return;\n }\n\n if (type === 'referenced' && ex.isAncestor(binding.path)) {\n // This identifier is declared inside the expression. We don't need it.\n return;\n }\n\n identifiers.push(path);\n };\n\n if (ex.isIdentifier() || ex.isJSXIdentifier()) {\n emit(ex);\n } else {\n ex.traverse({\n TSTypeAnnotation(path) {\n // We ignore identifiers in type annotations\n // It will produce broken TS code, but we don't care\n path.skip();\n },\n Identifier(path: NodePath<Identifier>) {\n emit(path);\n },\n JSXIdentifier(path: NodePath<JSXIdentifier>) {\n emit(path);\n },\n });\n }\n });\n\n return identifiers;\n}\n"],"mappings":";;;;;;;AAKA,MAAMA,QAAqD,GAAG;EAC5DC,OAAO,EAAGC,EAAD,IAAQA,EAAE,CAACC,mBAAH,EAD2C;EAE5DC,IAAI,EAAGF,EAAD,IAAQA,EAAE,CAACC,mBAAH,MAA4BD,EAAE,CAACG,sBAAH,EAFkB;EAG5DC,UAAU,EAAGJ,EAAD,IAAQA,EAAE,CAACG,sBAAH;AAHwC,CAA9D;;AAMO,SAASE,OAAT,CAAiBC,IAAjB,EAA0C;EAC/C,OAAO,CAACA,IAAI,CAACC,IAAL,CACLC,CAAD,IACEA,CAAC,CAACC,iBAAF,MACAD,CAAC,CAACE,aAAF,EADA,IAEAF,CAAC,CAACG,UAAF,EAFA,IAGAH,CAAC,CAACI,iBAAF,EALI,CAAR;AAOD;;AAEc,SAASC,eAAT,CACbC,WADa,EAEbC,IAAc,GAAG,YAFJ,EAG2B;EACxC,MAAMC,WAAmD,GAAG,EAA5D;EAEAF,WAAW,CAACG,OAAZ,CAAqBjB,EAAD,IAAQ;IAC1B,MAAMkB,IAAI,GAAIZ,IAAD,IAAgD;MAC3D,IAAI,CAACA,IAAI,CAACa,IAAN,IAAcb,IAAI,CAACc,OAAnB,IAA8B,CAACtB,QAAQ,CAACiB,IAAD,CAAR,CAAeT,IAAf,CAAnC,EAAyD;QACvD;MACD;;MAED,IAAI,CAACD,OAAO,CAACC,IAAD,CAAZ,EAAoB;QAClB;QACA;MACD,CAR0D,CAU3D;;;MAEA,MAAMP,OAAO,GAAGO,IAAI,CAACe,KAAL,CAAWC,UAAX,CAAsBhB,IAAI,CAACa,IAAL,CAAUI,IAAhC,CAAhB;;MACA,IAAI,CAACxB,OAAL,EAAc;QACZ;MACD;;MAED,IAAIgB,IAAI,KAAK,YAAT,IAAyBf,EAAE,CAACwB,UAAH,CAAczB,OAAO,CAACO,IAAtB,CAA7B,EAA0D;QACxD;QACA;MACD;;MAEDU,WAAW,CAACS,IAAZ,CAAiBnB,IAAjB;IACD,CAvBD;;IAyBA,IAAIN,EAAE,CAAC0B,YAAH,MAAqB1B,EAAE,CAAC2B,eAAH,EAAzB,EAA+C;MAC7CT,IAAI,CAAClB,EAAD,CAAJ;IACD,CAFD,MAEO;MACLA,EAAE,CAAC4B,QAAH,CAAY;QACVC,gBAAgB,CAACvB,IAAD,EAAO;UACrB;UACA;UACAA,IAAI,CAACwB,IAAL;QACD,CALS;;QAMVC,UAAU,CAACzB,IAAD,EAA6B;UACrCY,IAAI,CAACZ,IAAD,CAAJ;QACD,CARS;;QASV0B,aAAa,CAAC1B,IAAD,EAAgC;UAC3CY,IAAI,CAACZ,IAAD,CAAJ;QACD;;MAXS,CAAZ;IAaD;EACF,CA3CD;EA6CA,OAAOU,WAAP;AACD"}
{"version":3,"file":"findIdentifiers.js","names":["isInVoid","path","parentPath","isUnaryExpression","operator","isBindingIdentifier","isReferencedIdentifier","checkers","binding","ex","both","referenced","nonType","find","p","isTSTypeReference","isTSTypeQuery","isFlowType","isFlowDeclaration","findIdentifiers","expressions","type","identifiers","forEach","emit","node","removed","getScope","getBinding","name","isAncestor","push","isIdentifier","isJSXIdentifier","traverse","TSTypeAnnotation","skip","Identifier","JSXIdentifier"],"sources":["../src/findIdentifiers.ts"],"sourcesContent":["import type { NodePath } from '@babel/traverse';\nimport type { Node, Identifier, JSXIdentifier } from '@babel/types';\n\nimport { getScope } from './getScope';\n\ntype FindType = 'binding' | 'both' | 'referenced';\n\nfunction isInVoid(path: NodePath): boolean {\n return path.parentPath?.isUnaryExpression({ operator: 'void' }) ?? false;\n}\n\nfunction isBindingIdentifier(path: NodePath): path is NodePath<Identifier> {\n return path.isBindingIdentifier() && !isInVoid(path);\n}\n\nfunction isReferencedIdentifier(\n path: NodePath\n): path is NodePath<Identifier | JSXIdentifier> {\n return path.isReferencedIdentifier() || isInVoid(path);\n}\n\n// For some reasons, `isBindingIdentifier` returns true for identifiers inside `void` expressions.\nconst checkers: Record<FindType, (ex: NodePath) => boolean> = {\n binding: (ex) => isBindingIdentifier(ex),\n both: (ex) => isBindingIdentifier(ex) || isReferencedIdentifier(ex),\n referenced: (ex) => isReferencedIdentifier(ex),\n};\n\nexport function nonType(path: NodePath): boolean {\n return !path.find(\n (p) =>\n p.isTSTypeReference() ||\n p.isTSTypeQuery() ||\n p.isFlowType() ||\n p.isFlowDeclaration()\n );\n}\n\nexport default function findIdentifiers(\n expressions: NodePath<Node | null | undefined>[],\n type: FindType = 'referenced'\n): NodePath<Identifier | JSXIdentifier>[] {\n const identifiers: NodePath<Identifier | JSXIdentifier>[] = [];\n\n expressions.forEach((ex) => {\n const emit = (path: NodePath<Identifier | JSXIdentifier>) => {\n if (!path.node || path.removed || !checkers[type](path)) {\n return;\n }\n\n if (!nonType(path)) {\n // If skip in TSTypeAnnotation visitor doesn't work\n return;\n }\n\n // TODO: Is there a better way to check that it's a local variable?\n\n const binding = getScope(path).getBinding(path.node.name);\n if (!binding) {\n return;\n }\n\n if (type === 'referenced' && ex.isAncestor(binding.path)) {\n // This identifier is declared inside the expression. We don't need it.\n return;\n }\n\n identifiers.push(path);\n };\n\n if (ex.isIdentifier() || ex.isJSXIdentifier()) {\n emit(ex);\n } else {\n ex.traverse({\n TSTypeAnnotation(path) {\n // We ignore identifiers in type annotations\n // It will produce broken TS code, but we don't care\n path.skip();\n },\n Identifier(path: NodePath<Identifier>) {\n emit(path);\n },\n JSXIdentifier(path: NodePath<JSXIdentifier>) {\n emit(path);\n },\n });\n }\n });\n\n return identifiers;\n}\n"],"mappings":";;;;;;;;AAGA;;AAIA,SAASA,QAAT,CAAkBC,IAAlB,EAA2C;EAAA;;EACzC,oDAAOA,IAAI,CAACC,UAAZ,qDAAO,iBAAiBC,iBAAjB,CAAmC;IAAEC,QAAQ,EAAE;EAAZ,CAAnC,CAAP,yEAAmE,KAAnE;AACD;;AAED,SAASC,mBAAT,CAA6BJ,IAA7B,EAA2E;EACzE,OAAOA,IAAI,CAACI,mBAAL,MAA8B,CAACL,QAAQ,CAACC,IAAD,CAA9C;AACD;;AAED,SAASK,sBAAT,CACEL,IADF,EAEgD;EAC9C,OAAOA,IAAI,CAACK,sBAAL,MAAiCN,QAAQ,CAACC,IAAD,CAAhD;AACD,C,CAED;;;AACA,MAAMM,QAAqD,GAAG;EAC5DC,OAAO,EAAGC,EAAD,IAAQJ,mBAAmB,CAACI,EAAD,CADwB;EAE5DC,IAAI,EAAGD,EAAD,IAAQJ,mBAAmB,CAACI,EAAD,CAAnB,IAA2BH,sBAAsB,CAACG,EAAD,CAFH;EAG5DE,UAAU,EAAGF,EAAD,IAAQH,sBAAsB,CAACG,EAAD;AAHkB,CAA9D;;AAMO,SAASG,OAAT,CAAiBX,IAAjB,EAA0C;EAC/C,OAAO,CAACA,IAAI,CAACY,IAAL,CACLC,CAAD,IACEA,CAAC,CAACC,iBAAF,MACAD,CAAC,CAACE,aAAF,EADA,IAEAF,CAAC,CAACG,UAAF,EAFA,IAGAH,CAAC,CAACI,iBAAF,EALI,CAAR;AAOD;;AAEc,SAASC,eAAT,CACbC,WADa,EAEbC,IAAc,GAAG,YAFJ,EAG2B;EACxC,MAAMC,WAAmD,GAAG,EAA5D;EAEAF,WAAW,CAACG,OAAZ,CAAqBd,EAAD,IAAQ;IAC1B,MAAMe,IAAI,GAAIvB,IAAD,IAAgD;MAC3D,IAAI,CAACA,IAAI,CAACwB,IAAN,IAAcxB,IAAI,CAACyB,OAAnB,IAA8B,CAACnB,QAAQ,CAACc,IAAD,CAAR,CAAepB,IAAf,CAAnC,EAAyD;QACvD;MACD;;MAED,IAAI,CAACW,OAAO,CAACX,IAAD,CAAZ,EAAoB;QAClB;QACA;MACD,CAR0D,CAU3D;;;MAEA,MAAMO,OAAO,GAAG,IAAAmB,kBAAA,EAAS1B,IAAT,EAAe2B,UAAf,CAA0B3B,IAAI,CAACwB,IAAL,CAAUI,IAApC,CAAhB;;MACA,IAAI,CAACrB,OAAL,EAAc;QACZ;MACD;;MAED,IAAIa,IAAI,KAAK,YAAT,IAAyBZ,EAAE,CAACqB,UAAH,CAActB,OAAO,CAACP,IAAtB,CAA7B,EAA0D;QACxD;QACA;MACD;;MAEDqB,WAAW,CAACS,IAAZ,CAAiB9B,IAAjB;IACD,CAvBD;;IAyBA,IAAIQ,EAAE,CAACuB,YAAH,MAAqBvB,EAAE,CAACwB,eAAH,EAAzB,EAA+C;MAC7CT,IAAI,CAACf,EAAD,CAAJ;IACD,CAFD,MAEO;MACLA,EAAE,CAACyB,QAAH,CAAY;QACVC,gBAAgB,CAAClC,IAAD,EAAO;UACrB;UACA;UACAA,IAAI,CAACmC,IAAL;QACD,CALS;;QAMVC,UAAU,CAACpC,IAAD,EAA6B;UACrCuB,IAAI,CAACvB,IAAD,CAAJ;QACD,CARS;;QASVqC,aAAa,CAACrC,IAAD,EAAgC;UAC3CuB,IAAI,CAACvB,IAAD,CAAJ;QACD;;MAXS,CAAZ;IAaD;EACF,CA3CD;EA6CA,OAAOqB,WAAP;AACD"}

@@ -1,1 +0,1 @@

{"version":3,"file":"index.js","names":[],"sources":["../src/index.ts"],"sourcesContent":["export {\n default as asyncResolveFallback,\n syncResolve,\n} from './asyncResolveFallback';\nexport { default as collectExportsAndImports } from './collectExportsAndImports';\nexport * from './collectExportsAndImports';\nexport { default as findIdentifiers } from './findIdentifiers';\nexport { default as getFileIdx } from './getFileIdx';\nexport { default as isExports } from './isExports';\nexport { default as isNotNull } from './isNotNull';\nexport { default as isRemoved } from './isRemoved';\nexport { default as isRequire } from './isRequire';\nexport { default as isTypedNode } from './isTypedNode';\nexport { default as isUnnecessaryReactCall } from './isUnnecessaryReactCall';\nexport * from './options';\nexport * from './scopeHelpers';\nexport { default as slugify } from './slugify';\nexport { default as JSXElementsRemover } from './visitors/JSXElementsRemover';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AAIA;;AACA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAAA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;;AACA;;AAAA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;;AACA;;AACA"}
{"version":3,"file":"index.js","names":[],"sources":["../src/index.ts"],"sourcesContent":["export type { IVariableContext } from './IVariableContext';\nexport {\n default as asyncResolveFallback,\n syncResolve,\n} from './asyncResolveFallback';\nexport { default as collectExportsAndImports } from './collectExportsAndImports';\nexport * from './collectExportsAndImports';\nexport { default as findIdentifiers } from './findIdentifiers';\nexport { default as getFileIdx } from './getFileIdx';\nexport { default as isExports } from './isExports';\nexport { default as isNotNull } from './isNotNull';\nexport { default as isRemoved } from './isRemoved';\nexport { default as isRequire } from './isRequire';\nexport { default as isTypedNode } from './isTypedNode';\nexport { default as isUnnecessaryReactCall } from './isUnnecessaryReactCall';\nexport * from './options';\nexport * from './scopeHelpers';\nexport { default as slugify } from './slugify';\nexport { default as JSXElementsRemover } from './visitors/JSXElementsRemover';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA;;AAIA;;AACA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAAA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;;AACA;;AAAA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;;AACA;;AACA"}

@@ -8,2 +8,4 @@ "use strict";

var _getScope = require("./getScope");
/**

@@ -18,4 +20,5 @@ * Checks that specified Identifier is a global `exports`

return id.scope.getBinding('exports') === undefined && id.scope.hasGlobal('exports');
const scope = (0, _getScope.getScope)(id);
return scope.getBinding('exports') === undefined && scope.hasGlobal('exports');
}
//# sourceMappingURL=isExports.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"isExports.js","names":["isExports","id","isIdentifier","node","name","scope","getBinding","undefined","hasGlobal"],"sources":["../src/isExports.ts"],"sourcesContent":["import type { NodePath } from '@babel/traverse';\n\n/**\n * Checks that specified Identifier is a global `exports`\n * @param id\n */\nexport default function isExports(id: NodePath | null | undefined) {\n if (!id?.isIdentifier() || id.node.name !== 'exports') {\n return false;\n }\n\n return (\n id.scope.getBinding('exports') === undefined &&\n id.scope.hasGlobal('exports')\n );\n}\n"],"mappings":";;;;;;;AAEA;AACA;AACA;AACA;AACe,SAASA,SAAT,CAAmBC,EAAnB,EAAoD;EACjE,IAAI,EAACA,EAAD,aAACA,EAAD,eAACA,EAAE,CAAEC,YAAJ,EAAD,KAAuBD,EAAE,CAACE,IAAH,CAAQC,IAAR,KAAiB,SAA5C,EAAuD;IACrD,OAAO,KAAP;EACD;;EAED,OACEH,EAAE,CAACI,KAAH,CAASC,UAAT,CAAoB,SAApB,MAAmCC,SAAnC,IACAN,EAAE,CAACI,KAAH,CAASG,SAAT,CAAmB,SAAnB,CAFF;AAID"}
{"version":3,"file":"isExports.js","names":["isExports","id","isIdentifier","node","name","scope","getScope","getBinding","undefined","hasGlobal"],"sources":["../src/isExports.ts"],"sourcesContent":["import type { NodePath } from '@babel/traverse';\n\nimport { getScope } from './getScope';\n\n/**\n * Checks that specified Identifier is a global `exports`\n * @param id\n */\nexport default function isExports(id: NodePath | null | undefined) {\n if (!id?.isIdentifier() || id.node.name !== 'exports') {\n return false;\n }\n\n const scope = getScope(id);\n\n return (\n scope.getBinding('exports') === undefined && scope.hasGlobal('exports')\n );\n}\n"],"mappings":";;;;;;;AAEA;;AAEA;AACA;AACA;AACA;AACe,SAASA,SAAT,CAAmBC,EAAnB,EAAoD;EACjE,IAAI,EAACA,EAAD,aAACA,EAAD,eAACA,EAAE,CAAEC,YAAJ,EAAD,KAAuBD,EAAE,CAACE,IAAH,CAAQC,IAAR,KAAiB,SAA5C,EAAuD;IACrD,OAAO,KAAP;EACD;;EAED,MAAMC,KAAK,GAAG,IAAAC,kBAAA,EAASL,EAAT,CAAd;EAEA,OACEI,KAAK,CAACE,UAAN,CAAiB,SAAjB,MAAgCC,SAAhC,IAA6CH,KAAK,CAACI,SAAN,CAAgB,SAAhB,CAD/C;AAGD"}

@@ -8,2 +8,4 @@ "use strict";

var _getScope = require("./getScope");
/**

@@ -18,4 +20,5 @@ * Checks that specified Identifier is a global `require`

return id.scope.getBinding('require') === undefined && id.scope.hasGlobal('require');
const scope = (0, _getScope.getScope)(id);
return scope.getBinding('require') === undefined && scope.hasGlobal('require');
}
//# sourceMappingURL=isRequire.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"isRequire.js","names":["isRequire","id","isIdentifier","node","name","scope","getBinding","undefined","hasGlobal"],"sources":["../src/isRequire.ts"],"sourcesContent":["import type { NodePath } from '@babel/traverse';\n\n/**\n * Checks that specified Identifier is a global `require`\n * @param id\n */\nexport default function isRequire(id: NodePath | null | undefined) {\n if (!id?.isIdentifier() || id.node.name !== 'require') {\n return false;\n }\n\n return (\n id.scope.getBinding('require') === undefined &&\n id.scope.hasGlobal('require')\n );\n}\n"],"mappings":";;;;;;;AAEA;AACA;AACA;AACA;AACe,SAASA,SAAT,CAAmBC,EAAnB,EAAoD;EACjE,IAAI,EAACA,EAAD,aAACA,EAAD,eAACA,EAAE,CAAEC,YAAJ,EAAD,KAAuBD,EAAE,CAACE,IAAH,CAAQC,IAAR,KAAiB,SAA5C,EAAuD;IACrD,OAAO,KAAP;EACD;;EAED,OACEH,EAAE,CAACI,KAAH,CAASC,UAAT,CAAoB,SAApB,MAAmCC,SAAnC,IACAN,EAAE,CAACI,KAAH,CAASG,SAAT,CAAmB,SAAnB,CAFF;AAID"}
{"version":3,"file":"isRequire.js","names":["isRequire","id","isIdentifier","node","name","scope","getScope","getBinding","undefined","hasGlobal"],"sources":["../src/isRequire.ts"],"sourcesContent":["import type { NodePath } from '@babel/traverse';\n\nimport { getScope } from './getScope';\n\n/**\n * Checks that specified Identifier is a global `require`\n * @param id\n */\nexport default function isRequire(id: NodePath | null | undefined) {\n if (!id?.isIdentifier() || id.node.name !== 'require') {\n return false;\n }\n\n const scope = getScope(id);\n\n return (\n scope.getBinding('require') === undefined && scope.hasGlobal('require')\n );\n}\n"],"mappings":";;;;;;;AAEA;;AAEA;AACA;AACA;AACA;AACe,SAASA,SAAT,CAAmBC,EAAnB,EAAoD;EACjE,IAAI,EAACA,EAAD,aAACA,EAAD,eAACA,EAAE,CAAEC,YAAJ,EAAD,KAAuBD,EAAE,CAACE,IAAH,CAAQC,IAAR,KAAiB,SAA5C,EAAuD;IACrD,OAAO,KAAP;EACD;;EAED,MAAMC,KAAK,GAAG,IAAAC,kBAAA,EAASL,EAAT,CAAd;EAEA,OACEI,KAAK,CAACE,UAAN,CAAiB,SAAjB,MAAgCC,SAAhC,IAA6CH,KAAK,CAACI,SAAN,CAAgB,SAAhB,CAD/C;AAGD"}

@@ -10,2 +10,4 @@ "use strict";

var _getScope = require("./getScope");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

@@ -66,5 +68,5 @@

if (callee.isIdentifier() && isHookOrCreateElement(callee.node.name)) {
var _callee$scope$getBind;
var _getScope$getBinding;
const bindingPath = (_callee$scope$getBind = callee.scope.getBinding(callee.node.name)) === null || _callee$scope$getBind === void 0 ? void 0 : _callee$scope$getBind.path;
const bindingPath = (_getScope$getBinding = (0, _getScope.getScope)(callee).getBinding(callee.node.name)) === null || _getScope$getBinding === void 0 ? void 0 : _getScope$getBinding.path;
return reactImports.some(i => bindingPath === null || bindingPath === void 0 ? void 0 : bindingPath.isAncestor(i.local));

@@ -74,3 +76,3 @@ }

if (callee.isMemberExpression()) {
var _object$scope$getBind, _bindingPath$isAncest;
var _getScope$getBinding2, _bindingPath$isAncest;

@@ -92,3 +94,3 @@ if (reactImports.some(i => i.local === callee)) {

const bindingPath = (_object$scope$getBind = object.scope.getBinding(object.node.name)) === null || _object$scope$getBind === void 0 ? void 0 : _object$scope$getBind.path;
const bindingPath = (_getScope$getBinding2 = (0, _getScope.getScope)(object).getBinding(object.node.name)) === null || _getScope$getBinding2 === void 0 ? void 0 : _getScope$getBinding2.path;
return (_bindingPath$isAncest = bindingPath === null || bindingPath === void 0 ? void 0 : bindingPath.isAncestor(defaultImport.local)) !== null && _bindingPath$isAncest !== void 0 ? _bindingPath$isAncest : false;

@@ -95,0 +97,0 @@ }

@@ -1,1 +0,1 @@

{"version":3,"file":"isUnnecessaryReactCall.js","names":["getCallee","p","callee","get","isSequenceExpression","expressions","length","isNumericLiteral","value","JSXRuntimeSource","isJSXRuntime","imports","jsxRuntime","find","i","source","jsxRuntimeName","local","isIdentifier","node","name","isMemberExpression","isHookOrCreateElement","test","isClassicReactRuntime","reactImports","filter","imported","bindingPath","scope","getBinding","path","some","isAncestor","object","property","defaultImport","isUnnecessaryReactCall","programPath","findParent","isProgram","collectExportsAndImports"],"sources":["../src/isUnnecessaryReactCall.ts"],"sourcesContent":["import type { NodePath } from '@babel/core';\nimport type { CallExpression } from '@babel/types';\n\nimport type { IImport, ISideEffectImport } from './collectExportsAndImports';\nimport collectExportsAndImports from './collectExportsAndImports';\n\nfunction getCallee(p: NodePath<CallExpression>) {\n const callee = p.get('callee');\n if (callee.isSequenceExpression()) {\n const expressions = callee.get('expressions');\n if (\n expressions.length === 2 &&\n expressions[0].isNumericLiteral({ value: 0 })\n ) {\n return expressions[1];\n }\n\n return callee;\n }\n\n return callee;\n}\n\nconst JSXRuntimeSource = 'react/jsx-runtime';\n\nfunction isJSXRuntime(\n p: NodePath<CallExpression>,\n imports: (IImport | ISideEffectImport)[]\n) {\n const jsxRuntime = imports.find((i) => i.source === JSXRuntimeSource);\n const jsxRuntimeName =\n jsxRuntime?.local?.isIdentifier() && jsxRuntime?.local?.node?.name;\n\n if (jsxRuntime) {\n const callee = getCallee(p);\n if (jsxRuntimeName && callee.isIdentifier({ name: jsxRuntimeName })) {\n return true;\n }\n\n if (\n callee.isMemberExpression() &&\n imports.find((i) => i.source === JSXRuntimeSource && i.local === callee)\n ) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction isHookOrCreateElement(name: string): boolean {\n return name === 'createElement' || /use[A-Z]/.test(name);\n}\n\nfunction isClassicReactRuntime(\n p: NodePath<CallExpression>,\n imports: (IImport | ISideEffectImport)[]\n) {\n const reactImports = imports.filter(\n (i) =>\n i.source === 'react' &&\n (i.imported === 'default' ||\n (i.imported && isHookOrCreateElement(i.imported)))\n ) as IImport[];\n\n if (reactImports.length === 0) return false;\n const callee = getCallee(p);\n if (callee.isIdentifier() && isHookOrCreateElement(callee.node.name)) {\n const bindingPath = callee.scope.getBinding(callee.node.name)?.path;\n return reactImports.some((i) => bindingPath?.isAncestor(i.local));\n }\n\n if (callee.isMemberExpression()) {\n if (reactImports.some((i) => i.local === callee)) {\n // It's React.createElement in CJS\n return true;\n }\n\n const object = callee.get('object');\n const property = callee.get('property');\n const defaultImport = reactImports.find((i) => i.imported === 'default');\n if (\n !defaultImport ||\n !defaultImport.local.isIdentifier() ||\n !property.isIdentifier() ||\n !isHookOrCreateElement(property.node.name) ||\n !object.isIdentifier({ name: defaultImport.local.node.name })\n ) {\n return false;\n }\n\n const bindingPath = object.scope.getBinding(object.node.name)?.path;\n return bindingPath?.isAncestor(defaultImport.local) ?? false;\n }\n\n return false;\n}\n\nexport default function isUnnecessaryReactCall(path: NodePath<CallExpression>) {\n const programPath = path.findParent((p) => p.isProgram());\n if (!programPath) {\n return false;\n }\n\n const { imports } = collectExportsAndImports(programPath);\n\n return isJSXRuntime(path, imports) || isClassicReactRuntime(path, imports);\n}\n"],"mappings":"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"}
{"version":3,"file":"isUnnecessaryReactCall.js","names":["getCallee","p","callee","get","isSequenceExpression","expressions","length","isNumericLiteral","value","JSXRuntimeSource","isJSXRuntime","imports","jsxRuntime","find","i","source","jsxRuntimeName","local","isIdentifier","node","name","isMemberExpression","isHookOrCreateElement","test","isClassicReactRuntime","reactImports","filter","imported","bindingPath","getScope","getBinding","path","some","isAncestor","object","property","defaultImport","isUnnecessaryReactCall","programPath","findParent","isProgram","collectExportsAndImports"],"sources":["../src/isUnnecessaryReactCall.ts"],"sourcesContent":["import type { NodePath } from '@babel/core';\nimport type { CallExpression } from '@babel/types';\n\nimport type { IImport, ISideEffectImport } from './collectExportsAndImports';\nimport collectExportsAndImports from './collectExportsAndImports';\nimport { getScope } from './getScope';\n\nfunction getCallee(p: NodePath<CallExpression>) {\n const callee = p.get('callee');\n if (callee.isSequenceExpression()) {\n const expressions = callee.get('expressions');\n if (\n expressions.length === 2 &&\n expressions[0].isNumericLiteral({ value: 0 })\n ) {\n return expressions[1];\n }\n\n return callee;\n }\n\n return callee;\n}\n\nconst JSXRuntimeSource = 'react/jsx-runtime';\n\nfunction isJSXRuntime(\n p: NodePath<CallExpression>,\n imports: (IImport | ISideEffectImport)[]\n) {\n const jsxRuntime = imports.find((i) => i.source === JSXRuntimeSource);\n const jsxRuntimeName =\n jsxRuntime?.local?.isIdentifier() && jsxRuntime?.local?.node?.name;\n\n if (jsxRuntime) {\n const callee = getCallee(p);\n if (jsxRuntimeName && callee.isIdentifier({ name: jsxRuntimeName })) {\n return true;\n }\n\n if (\n callee.isMemberExpression() &&\n imports.find((i) => i.source === JSXRuntimeSource && i.local === callee)\n ) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction isHookOrCreateElement(name: string): boolean {\n return name === 'createElement' || /use[A-Z]/.test(name);\n}\n\nfunction isClassicReactRuntime(\n p: NodePath<CallExpression>,\n imports: (IImport | ISideEffectImport)[]\n) {\n const reactImports = imports.filter(\n (i) =>\n i.source === 'react' &&\n (i.imported === 'default' ||\n (i.imported && isHookOrCreateElement(i.imported)))\n ) as IImport[];\n\n if (reactImports.length === 0) return false;\n const callee = getCallee(p);\n if (callee.isIdentifier() && isHookOrCreateElement(callee.node.name)) {\n const bindingPath = getScope(callee).getBinding(callee.node.name)?.path;\n return reactImports.some((i) => bindingPath?.isAncestor(i.local));\n }\n\n if (callee.isMemberExpression()) {\n if (reactImports.some((i) => i.local === callee)) {\n // It's React.createElement in CJS\n return true;\n }\n\n const object = callee.get('object');\n const property = callee.get('property');\n const defaultImport = reactImports.find((i) => i.imported === 'default');\n if (\n !defaultImport ||\n !defaultImport.local.isIdentifier() ||\n !property.isIdentifier() ||\n !isHookOrCreateElement(property.node.name) ||\n !object.isIdentifier({ name: defaultImport.local.node.name })\n ) {\n return false;\n }\n\n const bindingPath = getScope(object).getBinding(object.node.name)?.path;\n return bindingPath?.isAncestor(defaultImport.local) ?? false;\n }\n\n return false;\n}\n\nexport default function isUnnecessaryReactCall(path: NodePath<CallExpression>) {\n const programPath = path.findParent((p) => p.isProgram());\n if (!programPath) {\n return false;\n }\n\n const { imports } = collectExportsAndImports(programPath);\n\n return isJSXRuntime(path, imports) || isClassicReactRuntime(path, imports);\n}\n"],"mappings":"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"}

@@ -1,1 +0,1 @@

{"version":3,"file":"types.js","names":[],"sources":["../../src/options/types.ts"],"sourcesContent":["import type { TransformOptions } from '@babel/core';\n\nimport type { Core } from '../babel';\n\nexport type ClassNameSlugVars = {\n dir: string;\n ext: string;\n file: string;\n hash: string;\n name: string;\n title: string;\n};\n\nexport type ClassNameFn = (\n hash: string,\n title: string,\n args: ClassNameSlugVars\n) => string;\n\nexport type Evaluator = (\n filename: string,\n options: StrictOptions,\n text: string,\n only: string[] | null,\n babel: Core\n) => [string, Map<string, string[]> | null];\n\nexport type EvalRule = {\n action: Evaluator | 'ignore' | string;\n babelOptions?: TransformOptions;\n test?: RegExp | ((path: string, code: string) => boolean);\n};\n\nexport type StrictOptions = {\n babelOptions: TransformOptions;\n classNameSlug?: string | ClassNameFn;\n displayName: boolean;\n evaluate: boolean;\n extensions: string[];\n ignore?: RegExp;\n tagResolver?: (source: string, tag: string) => string | null;\n rules: EvalRule[];\n};\n"],"mappings":""}
{"version":3,"file":"types.js","names":[],"sources":["../../src/options/types.ts"],"sourcesContent":["import type { TransformOptions } from '@babel/core';\n\nimport type { IVariableContext } from '../IVariableContext';\nimport type { Core } from '../babel';\n\nexport type ClassNameSlugVars = {\n dir: string;\n ext: string;\n file: string;\n hash: string;\n name: string;\n title: string;\n};\n\nexport type ClassNameFn = (\n hash: string,\n title: string,\n args: ClassNameSlugVars\n) => string;\n\nexport type VariableNameFn = (context: IVariableContext) => string;\n\nexport type Evaluator = (\n filename: string,\n options: StrictOptions,\n text: string,\n only: string[] | null,\n babel: Core\n) => [string, Map<string, string[]> | null];\n\nexport type EvalRule = {\n action: Evaluator | 'ignore' | string;\n babelOptions?: TransformOptions;\n test?: RegExp | ((path: string, code: string) => boolean);\n};\n\nexport type StrictOptions = {\n babelOptions: TransformOptions;\n classNameSlug?: string | ClassNameFn;\n displayName: boolean;\n evaluate: boolean;\n extensions: string[];\n ignore?: RegExp;\n rules: EvalRule[];\n tagResolver?: (source: string, tag: string) => string | null;\n variableNameSlug?: string | VariableNameFn;\n};\n"],"mappings":""}

@@ -15,2 +15,4 @@ "use strict";

var _getScope = require("./getScope");
var _isNotNull = _interopRequireDefault(require("./isNotNull"));

@@ -30,3 +32,3 @@

function getBinding(path) {
const binding = path.scope.getBinding(path.node.name);
const binding = (0, _getScope.getScope)(path).getBinding(path.node.name);

@@ -263,3 +265,3 @@ if (!binding) {

if (!item.node || (0, _isRemoved.default)(item)) return;
const binding = item.scope.getBinding(item.node.name);
const binding = (0, _getScope.getScope)(item).getBinding(item.node.name);
if (!binding) return;

@@ -291,3 +293,3 @@ const hasReferences = binding.referencePaths.filter(i => !(0, _isRemoved.default)(i)).length > 0;

if (paths.length === 0) return;
const rootPath = paths[0].scope.getProgramParent().path;
const rootPath = (0, _getScope.getScope)(paths[0]).getProgramParent().path;

@@ -308,3 +310,3 @@ if (!fixed.has(rootPath)) {

referencedIdentifiers.push(...(0, _findIdentifiers.default)([deletingPath], 'referenced'));
declared.push(...(0, _findIdentifiers.default)([deletingPath], 'binding').map(i => i.scope.getBinding(i.node.name)));
declared.push(...(0, _findIdentifiers.default)([deletingPath], 'binding').map(i => (0, _getScope.getScope)(i).getBinding(i.node.name)));
mutate(deletingPath, p => {

@@ -311,0 +313,0 @@ if (!(0, _isRemoved.default)(p)) p.remove();

@@ -1,1 +0,1 @@

{"version":3,"file":"scopeHelpers.js","names":["getBinding","path","binding","scope","node","name","undefined","reference","referencePath","force","isReferencedIdentifier","referencePaths","includes","referenced","references","push","isReferenced","kind","some","i","find","ancestor","isTSType","isFlowType","dereference","filter","length","dereferenceAll","findIdentifiers","map","identifierPath","isNotNull","referenceAll","forEach","deletingNodes","WeakSet","findParentForDelete","isRemoved","add","parent","parentPath","isProgram","isLogicalExpression","operator","mutate","p","replaceWith","type","value","isObjectProperty","key","get","isIdentifier","maybeDefineProperty","isCallExpression","matchesPattern","isTemplateLiteral","isAssignmentExpression","isForInStatement","left","isFunctionExpression","body","isFunctionDeclaration","isObjectMethod","isClassMethod","isBlockStatement","listKey","prevStatement","isIfStatement","isReturnStatement","slice","every","statement","has","isVariableDeclarator","isExportNamedDeclaration","specifiers","declaration","isExportDefaultDeclaration","isTryStatement","isExportSpecifier","isConditionalExpression","list","referenceEnums","program","traverse","ExpressionStatement","expressionStatement","expression","callee","args","arg","fixed","removeUnreferenced","items","Set","item","hasReferences","forDeleting","constantViolations","identifier","removeWithRelated","result","sort","a","b","localeCompare","paths","rootPath","getProgramParent","clean","referencedIdentifiers","declared","deletingPath","remove","reduce","acc","nonType","join","fn","dereferenced","mutated","dead","assignments","assignment","Object","values","getOuterBindingIdentifiers","Identifier","isArrayPattern","elements"],"sources":["../src/scopeHelpers.ts"],"sourcesContent":["/* eslint-disable no-restricted-syntax */\n/* eslint @typescript-eslint/no-use-before-define: [\"error\", { \"functions\": false }] */\n\nimport type { Binding, NodePath } from '@babel/traverse';\nimport type { Identifier, JSXIdentifier, Program } from '@babel/types';\n\nimport findIdentifiers, { nonType } from './findIdentifiers';\nimport isNotNull from './isNotNull';\nimport isRemoved from './isRemoved';\n\nfunction getBinding(path: NodePath<Identifier | JSXIdentifier>) {\n const binding = path.scope.getBinding(path.node.name);\n if (!binding) {\n return undefined;\n }\n\n return binding;\n}\n\nexport function reference(\n path: NodePath<Identifier | JSXIdentifier>,\n referencePath: NodePath = path,\n force = false\n): void {\n if (!force && !path.isReferencedIdentifier()) return;\n\n const binding = getBinding(path);\n if (!binding) return;\n\n if (binding.referencePaths.includes(referencePath)) {\n return;\n }\n\n binding.referenced = true;\n binding.references += 1;\n binding.referencePaths.push(referencePath ?? path);\n}\n\nfunction isReferenced(binding: Binding) {\n if (!binding.referenced) {\n return false;\n }\n\n // If it's a param binding, we can't just remove it\n // because it brakes the function signature. Keep it alive for now.\n if ((binding.kind as string) === 'param') {\n return true;\n }\n\n // If all remaining references are in TS/Flow types, binding is unreferenced\n return binding.referencePaths.some(\n (i) => !i.find((ancestor) => ancestor.isTSType() || ancestor.isFlowType())\n );\n}\n\nexport function dereference(\n path: NodePath<Identifier | JSXIdentifier>\n): Binding | null {\n const binding = getBinding(path);\n if (!binding) return null;\n\n if (!binding.referencePaths.includes(path)) {\n return null;\n }\n\n binding.references -= 1;\n binding.referencePaths = binding.referencePaths.filter((i) => i !== path);\n binding.referenced = binding.referencePaths.length > 0;\n\n return binding;\n}\n\nfunction dereferenceAll(path: NodePath): Binding[] {\n return findIdentifiers([path])\n .map((identifierPath) => dereference(identifierPath))\n .filter(isNotNull);\n}\n\nexport function referenceAll(path: NodePath): void {\n findIdentifiers([path]).forEach((identifierPath) =>\n reference(identifierPath)\n );\n}\n\nconst deletingNodes = new WeakSet<NodePath>();\n\nexport function findParentForDelete(path: NodePath): NodePath | null {\n if (isRemoved(path)) return null;\n\n deletingNodes.add(path);\n\n const parent = path.parentPath;\n\n if (!parent) return path;\n\n if (parent.isProgram()) {\n // Do not delete Program node\n return path;\n }\n\n if (parent.isLogicalExpression({ operator: '&&' })) {\n mutate(parent, (p) => {\n p.replaceWith({\n type: 'BooleanLiteral',\n value: false,\n });\n });\n\n return null;\n }\n\n if (parent.isObjectProperty()) {\n // let's check if it is a special case with Object.defineProperty\n const key = parent.get('key');\n if (key.isIdentifier({ name: 'get' })) {\n const maybeDefineProperty = parent.parentPath.parentPath;\n if (\n maybeDefineProperty?.isCallExpression() &&\n maybeDefineProperty\n .get('callee')\n .matchesPattern('Object.defineProperty')\n ) {\n return findParentForDelete(maybeDefineProperty);\n }\n }\n\n return findParentForDelete(parent);\n }\n\n if (parent.isTemplateLiteral()) {\n mutate(path, (p) => {\n p.replaceWith({\n type: 'StringLiteral',\n value: '',\n });\n });\n return null;\n }\n\n if (parent.isAssignmentExpression()) {\n return findParentForDelete(parent);\n }\n\n if (parent.isCallExpression()) {\n return findParentForDelete(parent);\n }\n\n if (parent.isForInStatement({ left: path.node })) {\n return findParentForDelete(parent);\n }\n\n if (\n parent.isFunctionExpression({ body: path.node }) ||\n parent.isFunctionDeclaration() ||\n parent.isObjectMethod() ||\n parent.isClassMethod()\n ) {\n return findParentForDelete(parent);\n }\n\n if (parent.isBlockStatement()) {\n const body = parent.get('body');\n if (body.length === 1) {\n return findParentForDelete(parent);\n }\n\n if (path.listKey === 'body' && typeof path.key === 'number') {\n if (path.key > 0) {\n // We can check whether the previous one can be removed\n const prevStatement = body[path.key - 1];\n if (\n prevStatement.isIfStatement() &&\n prevStatement.get('consequent').isReturnStatement()\n ) {\n // It's `if (…) return …`, we can remove it.\n return findParentForDelete(prevStatement);\n }\n } else if (\n body.slice(1).every((statement) => deletingNodes.has(statement))\n ) {\n // If it is the first statement and all other statements\n // are marked for deletion, we can remove the whole block.\n return findParentForDelete(parent);\n }\n }\n }\n\n if (parent.isVariableDeclarator()) {\n return findParentForDelete(parent);\n }\n\n if (\n parent.isExportNamedDeclaration() &&\n ((parent.node.specifiers.length === 1 &&\n parent.node.specifiers[0] === path.node) ||\n parent.node.declaration === path.node)\n ) {\n return findParentForDelete(parent);\n }\n\n if (parent.isExportDefaultDeclaration()) {\n return findParentForDelete(parent);\n }\n\n if (parent.isTryStatement()) {\n return findParentForDelete(parent);\n }\n\n if (parent.isExportSpecifier()) {\n return findParentForDelete(parent);\n }\n\n if (parent.isConditionalExpression()) {\n return findParentForDelete(parent);\n }\n\n for (const key of ['body', 'declarations', 'specifiers']) {\n if (path.listKey === key && typeof path.key === 'number') {\n const list = parent.get(key) as NodePath[];\n if (list.length === 1) {\n return findParentForDelete(parent);\n }\n }\n }\n\n for (const key of [\n 'argument',\n 'block',\n 'body',\n 'callee',\n 'discriminant',\n 'expression',\n 'id',\n 'left',\n 'object',\n 'property',\n 'right',\n 'test',\n ]) {\n if (path.key === key && parent.get(key) === path) {\n return findParentForDelete(parent);\n }\n }\n\n return path;\n}\n\n// @babel/preset-typescript transpiles enums, but doesn't reference used identifiers.\nfunction referenceEnums(program: NodePath<Program>) {\n /*\n * We are looking for transpiled enums.\n * (function (Colors) {\n * Colors[\"BLUE\"] = \"#27509A\";\n * })(Colors || (Colors = {}));\n */\n program.traverse({\n ExpressionStatement(expressionStatement) {\n const expression = expressionStatement.get('expression');\n if (!expression.isCallExpression()) return;\n\n const callee = expression.get('callee');\n const args = expression.get('arguments');\n if (!callee.isFunctionExpression() || args.length !== 1) return;\n const [arg] = args;\n if (arg.isLogicalExpression({ operator: '||' })) {\n referenceAll(arg);\n }\n },\n });\n}\n\nconst fixed = new WeakSet<NodePath<Program>>();\n\nfunction removeUnreferenced(items: NodePath<Identifier | JSXIdentifier>[]) {\n const referenced = new Set<NodePath<Identifier | JSXIdentifier>>();\n items.forEach((item) => {\n if (!item.node || isRemoved(item)) return;\n const binding = item.scope.getBinding(item.node.name);\n if (!binding) return;\n const hasReferences =\n binding.referencePaths.filter((i) => !isRemoved(i)).length > 0;\n if (hasReferences) {\n referenced.add(item);\n return;\n }\n\n const forDeleting = [binding.path, ...binding.constantViolations]\n .map((i) => findParentForDelete(i))\n .filter(isNotNull);\n\n if (forDeleting.length === 0) return;\n\n findIdentifiers(forDeleting).forEach((identifier) => {\n referenced.add(identifier);\n });\n\n removeWithRelated(forDeleting);\n });\n\n const result = [...referenced];\n result.sort((a, b) => a.node?.name.localeCompare(b.node?.name));\n\n return result;\n}\n\nfunction removeWithRelated(paths: NodePath[]) {\n if (paths.length === 0) return;\n\n const rootPath = paths[0].scope.getProgramParent().path as NodePath<Program>;\n\n if (!fixed.has(rootPath)) {\n // Some libraries don't care about bindings, references, and other staff\n // So we have to fix the scope before we can detect unused code\n referenceEnums(rootPath);\n fixed.add(rootPath);\n }\n\n let clean = false;\n let referencedIdentifiers: NodePath<Identifier | JSXIdentifier>[] = [];\n const declared: Binding[] = [];\n\n paths.forEach((path) => {\n const deletingPath = findParentForDelete(path);\n if (!deletingPath) return;\n\n referencedIdentifiers.push(\n ...findIdentifiers([deletingPath], 'referenced')\n );\n declared.push(\n ...findIdentifiers([deletingPath], 'binding').map(\n (i) => i.scope.getBinding(i.node.name)!\n )\n );\n\n mutate(deletingPath, (p) => {\n if (!isRemoved(p)) p.remove();\n });\n });\n\n if (declared.length > 0) {\n removeWithRelated(\n declared.reduce(\n (acc, i) => [...acc, ...i.referencePaths.filter(nonType)],\n [] as NodePath[]\n )\n );\n }\n\n referencedIdentifiers.sort((a, b) =>\n a.node?.name.localeCompare(b.node?.name)\n );\n\n while (!clean && referencedIdentifiers.length > 0) {\n const referenced = removeUnreferenced(referencedIdentifiers);\n clean =\n referenced.map((i) => i.node?.name).join('|') ===\n referencedIdentifiers.map((i) => i.node?.name).join('|');\n referencedIdentifiers = referenced;\n }\n}\n\nfunction mutate<T extends NodePath>(path: T, fn: (p: T) => NodePath[] | void) {\n const dereferenced = dereferenceAll(path);\n\n const mutated = fn(path);\n\n referenceAll(path);\n mutated?.forEach((p) => referenceAll(p));\n\n const dead = dereferenced.filter((p) => !isReferenced(p));\n\n const forDeleting: NodePath[] = [];\n dead.forEach((binding) => {\n const assignments = [binding.path, ...binding.constantViolations];\n assignments.forEach((assignment) => {\n const { scope } = assignment;\n const declared = Object.values(\n assignment.getOuterBindingIdentifiers(false)\n );\n if (\n declared.length === 1 &&\n 'name' in declared[0] &&\n declared[0].name === binding.identifier.name\n ) {\n // Only one identifier is declared, so we can remove the whole declaration\n forDeleting.push(assignment);\n return;\n }\n\n if (\n declared.every(\n (identifier) =>\n identifier.type === 'Identifier' &&\n !scope.getBinding(identifier.name)?.referenced\n )\n ) {\n // No other identifier is referenced, so we can remove the whole declaration\n forDeleting.push(assignment);\n return;\n }\n\n // We can't remove the binding, but we can remove the part of it\n assignment.traverse({\n Identifier(identifier) {\n if (identifier.node.name === binding.identifier.name) {\n const parent = identifier.parentPath;\n if (\n parent.isArrayPattern() &&\n identifier.listKey === 'elements' &&\n typeof identifier.key === 'number'\n ) {\n parent.node.elements[identifier.key] = null;\n } else if (parent.isObjectProperty()) {\n forDeleting.push(parent);\n }\n }\n },\n });\n });\n });\n\n removeWithRelated(forDeleting);\n}\n\nexport { mutate, removeWithRelated };\n"],"mappings":"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"}
{"version":3,"file":"scopeHelpers.js","names":["getBinding","path","binding","getScope","node","name","undefined","reference","referencePath","force","isReferencedIdentifier","referencePaths","includes","referenced","references","push","isReferenced","kind","some","i","find","ancestor","isTSType","isFlowType","dereference","filter","length","dereferenceAll","findIdentifiers","map","identifierPath","isNotNull","referenceAll","forEach","deletingNodes","WeakSet","findParentForDelete","isRemoved","add","parent","parentPath","isProgram","isLogicalExpression","operator","mutate","p","replaceWith","type","value","isObjectProperty","key","get","isIdentifier","maybeDefineProperty","isCallExpression","matchesPattern","isTemplateLiteral","isAssignmentExpression","isForInStatement","left","isFunctionExpression","body","isFunctionDeclaration","isObjectMethod","isClassMethod","isBlockStatement","listKey","prevStatement","isIfStatement","isReturnStatement","slice","every","statement","has","isVariableDeclarator","isExportNamedDeclaration","specifiers","declaration","isExportDefaultDeclaration","isTryStatement","isExportSpecifier","isConditionalExpression","list","referenceEnums","program","traverse","ExpressionStatement","expressionStatement","expression","callee","args","arg","fixed","removeUnreferenced","items","Set","item","hasReferences","forDeleting","constantViolations","identifier","removeWithRelated","result","sort","a","b","localeCompare","paths","rootPath","getProgramParent","clean","referencedIdentifiers","declared","deletingPath","remove","reduce","acc","nonType","join","fn","dereferenced","mutated","dead","assignments","assignment","scope","Object","values","getOuterBindingIdentifiers","Identifier","isArrayPattern","elements"],"sources":["../src/scopeHelpers.ts"],"sourcesContent":["/* eslint-disable no-restricted-syntax */\n/* eslint @typescript-eslint/no-use-before-define: [\"error\", { \"functions\": false }] */\n\nimport type { Binding, NodePath } from '@babel/traverse';\nimport type { Identifier, JSXIdentifier, Program } from '@babel/types';\n\nimport findIdentifiers, { nonType } from './findIdentifiers';\nimport { getScope } from './getScope';\nimport isNotNull from './isNotNull';\nimport isRemoved from './isRemoved';\n\nfunction getBinding(path: NodePath<Identifier | JSXIdentifier>) {\n const binding = getScope(path).getBinding(path.node.name);\n if (!binding) {\n return undefined;\n }\n\n return binding;\n}\n\nexport function reference(\n path: NodePath<Identifier | JSXIdentifier>,\n referencePath: NodePath = path,\n force = false\n): void {\n if (!force && !path.isReferencedIdentifier()) return;\n\n const binding = getBinding(path);\n if (!binding) return;\n\n if (binding.referencePaths.includes(referencePath)) {\n return;\n }\n\n binding.referenced = true;\n binding.references += 1;\n binding.referencePaths.push(referencePath ?? path);\n}\n\nfunction isReferenced(binding: Binding) {\n if (!binding.referenced) {\n return false;\n }\n\n // If it's a param binding, we can't just remove it\n // because it brakes the function signature. Keep it alive for now.\n if ((binding.kind as string) === 'param') {\n return true;\n }\n\n // If all remaining references are in TS/Flow types, binding is unreferenced\n return binding.referencePaths.some(\n (i) => !i.find((ancestor) => ancestor.isTSType() || ancestor.isFlowType())\n );\n}\n\nexport function dereference(\n path: NodePath<Identifier | JSXIdentifier>\n): Binding | null {\n const binding = getBinding(path);\n if (!binding) return null;\n\n if (!binding.referencePaths.includes(path)) {\n return null;\n }\n\n binding.references -= 1;\n binding.referencePaths = binding.referencePaths.filter((i) => i !== path);\n binding.referenced = binding.referencePaths.length > 0;\n\n return binding;\n}\n\nfunction dereferenceAll(path: NodePath): Binding[] {\n return findIdentifiers([path])\n .map((identifierPath) => dereference(identifierPath))\n .filter(isNotNull);\n}\n\nexport function referenceAll(path: NodePath): void {\n findIdentifiers([path]).forEach((identifierPath) =>\n reference(identifierPath)\n );\n}\n\nconst deletingNodes = new WeakSet<NodePath>();\n\nexport function findParentForDelete(path: NodePath): NodePath | null {\n if (isRemoved(path)) return null;\n\n deletingNodes.add(path);\n\n const parent = path.parentPath;\n\n if (!parent) return path;\n\n if (parent.isProgram()) {\n // Do not delete Program node\n return path;\n }\n\n if (parent.isLogicalExpression({ operator: '&&' })) {\n mutate(parent, (p) => {\n p.replaceWith({\n type: 'BooleanLiteral',\n value: false,\n });\n });\n\n return null;\n }\n\n if (parent.isObjectProperty()) {\n // let's check if it is a special case with Object.defineProperty\n const key = parent.get('key');\n if (key.isIdentifier({ name: 'get' })) {\n const maybeDefineProperty = parent.parentPath.parentPath;\n if (\n maybeDefineProperty?.isCallExpression() &&\n maybeDefineProperty\n .get('callee')\n .matchesPattern('Object.defineProperty')\n ) {\n return findParentForDelete(maybeDefineProperty);\n }\n }\n\n return findParentForDelete(parent);\n }\n\n if (parent.isTemplateLiteral()) {\n mutate(path, (p) => {\n p.replaceWith({\n type: 'StringLiteral',\n value: '',\n });\n });\n return null;\n }\n\n if (parent.isAssignmentExpression()) {\n return findParentForDelete(parent);\n }\n\n if (parent.isCallExpression()) {\n return findParentForDelete(parent);\n }\n\n if (parent.isForInStatement({ left: path.node })) {\n return findParentForDelete(parent);\n }\n\n if (\n parent.isFunctionExpression({ body: path.node }) ||\n parent.isFunctionDeclaration() ||\n parent.isObjectMethod() ||\n parent.isClassMethod()\n ) {\n return findParentForDelete(parent);\n }\n\n if (parent.isBlockStatement()) {\n const body = parent.get('body');\n if (body.length === 1) {\n return findParentForDelete(parent);\n }\n\n if (path.listKey === 'body' && typeof path.key === 'number') {\n if (path.key > 0) {\n // We can check whether the previous one can be removed\n const prevStatement = body[path.key - 1];\n if (\n prevStatement.isIfStatement() &&\n prevStatement.get('consequent').isReturnStatement()\n ) {\n // It's `if (…) return …`, we can remove it.\n return findParentForDelete(prevStatement);\n }\n } else if (\n body.slice(1).every((statement) => deletingNodes.has(statement))\n ) {\n // If it is the first statement and all other statements\n // are marked for deletion, we can remove the whole block.\n return findParentForDelete(parent);\n }\n }\n }\n\n if (parent.isVariableDeclarator()) {\n return findParentForDelete(parent);\n }\n\n if (\n parent.isExportNamedDeclaration() &&\n ((parent.node.specifiers.length === 1 &&\n parent.node.specifiers[0] === path.node) ||\n parent.node.declaration === path.node)\n ) {\n return findParentForDelete(parent);\n }\n\n if (parent.isExportDefaultDeclaration()) {\n return findParentForDelete(parent);\n }\n\n if (parent.isTryStatement()) {\n return findParentForDelete(parent);\n }\n\n if (parent.isExportSpecifier()) {\n return findParentForDelete(parent);\n }\n\n if (parent.isConditionalExpression()) {\n return findParentForDelete(parent);\n }\n\n for (const key of ['body', 'declarations', 'specifiers']) {\n if (path.listKey === key && typeof path.key === 'number') {\n const list = parent.get(key) as NodePath[];\n if (list.length === 1) {\n return findParentForDelete(parent);\n }\n }\n }\n\n for (const key of [\n 'argument',\n 'block',\n 'body',\n 'callee',\n 'discriminant',\n 'expression',\n 'id',\n 'left',\n 'object',\n 'property',\n 'right',\n 'test',\n ]) {\n if (path.key === key && parent.get(key) === path) {\n return findParentForDelete(parent);\n }\n }\n\n return path;\n}\n\n// @babel/preset-typescript transpiles enums, but doesn't reference used identifiers.\nfunction referenceEnums(program: NodePath<Program>) {\n /*\n * We are looking for transpiled enums.\n * (function (Colors) {\n * Colors[\"BLUE\"] = \"#27509A\";\n * })(Colors || (Colors = {}));\n */\n program.traverse({\n ExpressionStatement(expressionStatement) {\n const expression = expressionStatement.get('expression');\n if (!expression.isCallExpression()) return;\n\n const callee = expression.get('callee');\n const args = expression.get('arguments');\n if (!callee.isFunctionExpression() || args.length !== 1) return;\n const [arg] = args;\n if (arg.isLogicalExpression({ operator: '||' })) {\n referenceAll(arg);\n }\n },\n });\n}\n\nconst fixed = new WeakSet<NodePath<Program>>();\n\nfunction removeUnreferenced(items: NodePath<Identifier | JSXIdentifier>[]) {\n const referenced = new Set<NodePath<Identifier | JSXIdentifier>>();\n items.forEach((item) => {\n if (!item.node || isRemoved(item)) return;\n const binding = getScope(item).getBinding(item.node.name);\n if (!binding) return;\n const hasReferences =\n binding.referencePaths.filter((i) => !isRemoved(i)).length > 0;\n if (hasReferences) {\n referenced.add(item);\n return;\n }\n\n const forDeleting = [binding.path, ...binding.constantViolations]\n .map((i) => findParentForDelete(i))\n .filter(isNotNull);\n\n if (forDeleting.length === 0) return;\n\n findIdentifiers(forDeleting).forEach((identifier) => {\n referenced.add(identifier);\n });\n\n removeWithRelated(forDeleting);\n });\n\n const result = [...referenced];\n result.sort((a, b) => a.node?.name.localeCompare(b.node?.name));\n\n return result;\n}\n\nfunction removeWithRelated(paths: NodePath[]) {\n if (paths.length === 0) return;\n\n const rootPath = getScope(paths[0]).getProgramParent()\n .path as NodePath<Program>;\n\n if (!fixed.has(rootPath)) {\n // Some libraries don't care about bindings, references, and other staff\n // So we have to fix the scope before we can detect unused code\n referenceEnums(rootPath);\n fixed.add(rootPath);\n }\n\n let clean = false;\n let referencedIdentifiers: NodePath<Identifier | JSXIdentifier>[] = [];\n const declared: Binding[] = [];\n\n paths.forEach((path) => {\n const deletingPath = findParentForDelete(path);\n if (!deletingPath) return;\n\n referencedIdentifiers.push(\n ...findIdentifiers([deletingPath], 'referenced')\n );\n declared.push(\n ...findIdentifiers([deletingPath], 'binding').map(\n (i) => getScope(i).getBinding(i.node.name)!\n )\n );\n\n mutate(deletingPath, (p) => {\n if (!isRemoved(p)) p.remove();\n });\n });\n\n if (declared.length > 0) {\n removeWithRelated(\n declared.reduce(\n (acc, i) => [...acc, ...i.referencePaths.filter(nonType)],\n [] as NodePath[]\n )\n );\n }\n\n referencedIdentifiers.sort((a, b) =>\n a.node?.name.localeCompare(b.node?.name)\n );\n\n while (!clean && referencedIdentifiers.length > 0) {\n const referenced = removeUnreferenced(referencedIdentifiers);\n clean =\n referenced.map((i) => i.node?.name).join('|') ===\n referencedIdentifiers.map((i) => i.node?.name).join('|');\n referencedIdentifiers = referenced;\n }\n}\n\nfunction mutate<T extends NodePath>(path: T, fn: (p: T) => NodePath[] | void) {\n const dereferenced = dereferenceAll(path);\n\n const mutated = fn(path);\n\n referenceAll(path);\n mutated?.forEach((p) => referenceAll(p));\n\n const dead = dereferenced.filter((p) => !isReferenced(p));\n\n const forDeleting: NodePath[] = [];\n dead.forEach((binding) => {\n const assignments = [binding.path, ...binding.constantViolations];\n assignments.forEach((assignment) => {\n const { scope } = assignment;\n const declared = Object.values(\n assignment.getOuterBindingIdentifiers(false)\n );\n if (\n declared.length === 1 &&\n 'name' in declared[0] &&\n declared[0].name === binding.identifier.name\n ) {\n // Only one identifier is declared, so we can remove the whole declaration\n forDeleting.push(assignment);\n return;\n }\n\n if (\n declared.every(\n (identifier) =>\n identifier.type === 'Identifier' &&\n !scope.getBinding(identifier.name)?.referenced\n )\n ) {\n // No other identifier is referenced, so we can remove the whole declaration\n forDeleting.push(assignment);\n return;\n }\n\n // We can't remove the binding, but we can remove the part of it\n assignment.traverse({\n Identifier(identifier) {\n if (identifier.node.name === binding.identifier.name) {\n const parent = identifier.parentPath;\n if (\n parent.isArrayPattern() &&\n identifier.listKey === 'elements' &&\n typeof identifier.key === 'number'\n ) {\n parent.node.elements[identifier.key] = null;\n } else if (parent.isObjectProperty()) {\n forDeleting.push(parent);\n }\n }\n },\n });\n });\n });\n\n removeWithRelated(forDeleting);\n}\n\nexport { mutate, removeWithRelated };\n"],"mappings":"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"}

@@ -10,2 +10,4 @@ "use strict";

var _getScope = require("../getScope");
var _scopeHelpers = require("../scopeHelpers");

@@ -27,3 +29,3 @@

const functionScope = path.scope.getFunctionParent();
const functionScope = (0, _getScope.getScope)(path).getFunctionParent();
const scopePath = functionScope === null || functionScope === void 0 ? void 0 : functionScope.path;

@@ -30,0 +32,0 @@

@@ -1,1 +0,1 @@

{"version":3,"file":"JSXElementsRemover.js","names":["getFunctionName","path","isClassMethod","t","isIdentifier","node","key","name","JSXElementsRemover","nullLiteral","functionScope","scope","getFunctionParent","scopePath","isFunction","emptyBody","blockStatement","returnStatement","decl","findParent","p","isClassDeclaration","mutate","replaceWith","functionDeclaration","id","body","get","Array","isArray","Error","params"],"sources":["../../src/visitors/JSXElementsRemover.ts"],"sourcesContent":["import { types as t } from '@babel/core';\nimport type { NodePath } from '@babel/traverse';\nimport type {\n CallExpression,\n Function as FunctionNode,\n JSX,\n} from '@babel/types';\n\nimport { mutate } from '../scopeHelpers';\n\nfunction getFunctionName(path: NodePath<FunctionNode>): string | null {\n if (path.isClassMethod() && t.isIdentifier(path.node.key)) {\n return path.node.key.name;\n }\n\n return null;\n}\n\nexport default function JSXElementsRemover(\n path: NodePath<JSX | CallExpression>\n) {\n // JSX can be safely replaced with null because it is unnecessary for styles\n const nullLiteral = t.nullLiteral();\n\n // We can do even more\n // If that JSX is a result of a function, we can replace the function body.\n const functionScope = path.scope.getFunctionParent();\n const scopePath = functionScope?.path;\n if (scopePath?.isFunction()) {\n const emptyBody = t.blockStatement([t.returnStatement(nullLiteral)]);\n\n // Is it not just a function, but a method `render`?\n if (getFunctionName(scopePath) === 'render') {\n const decl = scopePath.findParent((p) => p.isClassDeclaration());\n\n // Replace the whole component\n if (decl?.isClassDeclaration()) {\n mutate(decl, (p) => {\n p.replaceWith(t.functionDeclaration(decl.node.id, [], emptyBody));\n });\n\n return;\n }\n }\n\n const body = scopePath.get('body');\n if (Array.isArray(body)) {\n throw new Error(\n \"A body of a function is expected to be a single element but an array was returned. It's possible if JS syntax has been changed since that code was written.\"\n );\n }\n\n const node: typeof scopePath.node = {\n ...scopePath.node,\n body: emptyBody,\n params: [],\n };\n\n mutate(scopePath, (p) => {\n p.replaceWith(node);\n });\n } else {\n mutate(path, (p) => {\n p.replaceWith(nullLiteral);\n });\n }\n}\n"],"mappings":";;;;;;;AAAA;;AAQA;;AAEA,SAASA,eAAT,CAAyBC,IAAzB,EAAsE;EACpE,IAAIA,IAAI,CAACC,aAAL,MAAwBC,WAAA,CAAEC,YAAF,CAAeH,IAAI,CAACI,IAAL,CAAUC,GAAzB,CAA5B,EAA2D;IACzD,OAAOL,IAAI,CAACI,IAAL,CAAUC,GAAV,CAAcC,IAArB;EACD;;EAED,OAAO,IAAP;AACD;;AAEc,SAASC,kBAAT,CACbP,IADa,EAEb;EACA;EACA,MAAMQ,WAAW,GAAGN,WAAA,CAAEM,WAAF,EAApB,CAFA,CAIA;EACA;;;EACA,MAAMC,aAAa,GAAGT,IAAI,CAACU,KAAL,CAAWC,iBAAX,EAAtB;EACA,MAAMC,SAAS,GAAGH,aAAH,aAAGA,aAAH,uBAAGA,aAAa,CAAET,IAAjC;;EACA,IAAIY,SAAJ,aAAIA,SAAJ,eAAIA,SAAS,CAAEC,UAAX,EAAJ,EAA6B;IAC3B,MAAMC,SAAS,GAAGZ,WAAA,CAAEa,cAAF,CAAiB,CAACb,WAAA,CAAEc,eAAF,CAAkBR,WAAlB,CAAD,CAAjB,CAAlB,CAD2B,CAG3B;;;IACA,IAAIT,eAAe,CAACa,SAAD,CAAf,KAA+B,QAAnC,EAA6C;MAC3C,MAAMK,IAAI,GAAGL,SAAS,CAACM,UAAV,CAAsBC,CAAD,IAAOA,CAAC,CAACC,kBAAF,EAA5B,CAAb,CAD2C,CAG3C;;MACA,IAAIH,IAAJ,aAAIA,IAAJ,eAAIA,IAAI,CAAEG,kBAAN,EAAJ,EAAgC;QAC9B,IAAAC,oBAAA,EAAOJ,IAAP,EAAcE,CAAD,IAAO;UAClBA,CAAC,CAACG,WAAF,CAAcpB,WAAA,CAAEqB,mBAAF,CAAsBN,IAAI,CAACb,IAAL,CAAUoB,EAAhC,EAAoC,EAApC,EAAwCV,SAAxC,CAAd;QACD,CAFD;QAIA;MACD;IACF;;IAED,MAAMW,IAAI,GAAGb,SAAS,CAACc,GAAV,CAAc,MAAd,CAAb;;IACA,IAAIC,KAAK,CAACC,OAAN,CAAcH,IAAd,CAAJ,EAAyB;MACvB,MAAM,IAAII,KAAJ,CACJ,6JADI,CAAN;IAGD;;IAED,MAAMzB,IAA2B,GAAG,EAClC,GAAGQ,SAAS,CAACR,IADqB;MAElCqB,IAAI,EAAEX,SAF4B;MAGlCgB,MAAM,EAAE;IAH0B,CAApC;IAMA,IAAAT,oBAAA,EAAOT,SAAP,EAAmBO,CAAD,IAAO;MACvBA,CAAC,CAACG,WAAF,CAAclB,IAAd;IACD,CAFD;EAGD,CAjCD,MAiCO;IACL,IAAAiB,oBAAA,EAAOrB,IAAP,EAAcmB,CAAD,IAAO;MAClBA,CAAC,CAACG,WAAF,CAAcd,WAAd;IACD,CAFD;EAGD;AACF"}
{"version":3,"file":"JSXElementsRemover.js","names":["getFunctionName","path","isClassMethod","t","isIdentifier","node","key","name","JSXElementsRemover","nullLiteral","functionScope","getScope","getFunctionParent","scopePath","isFunction","emptyBody","blockStatement","returnStatement","decl","findParent","p","isClassDeclaration","mutate","replaceWith","functionDeclaration","id","body","get","Array","isArray","Error","params"],"sources":["../../src/visitors/JSXElementsRemover.ts"],"sourcesContent":["import { types as t } from '@babel/core';\nimport type { NodePath } from '@babel/traverse';\nimport type {\n CallExpression,\n Function as FunctionNode,\n JSX,\n} from '@babel/types';\n\nimport { getScope } from '../getScope';\nimport { mutate } from '../scopeHelpers';\n\nfunction getFunctionName(path: NodePath<FunctionNode>): string | null {\n if (path.isClassMethod() && t.isIdentifier(path.node.key)) {\n return path.node.key.name;\n }\n\n return null;\n}\n\nexport default function JSXElementsRemover(\n path: NodePath<JSX | CallExpression>\n) {\n // JSX can be safely replaced with null because it is unnecessary for styles\n const nullLiteral = t.nullLiteral();\n\n // We can do even more\n // If that JSX is a result of a function, we can replace the function body.\n const functionScope = getScope(path).getFunctionParent();\n const scopePath = functionScope?.path;\n if (scopePath?.isFunction()) {\n const emptyBody = t.blockStatement([t.returnStatement(nullLiteral)]);\n\n // Is it not just a function, but a method `render`?\n if (getFunctionName(scopePath) === 'render') {\n const decl = scopePath.findParent((p) => p.isClassDeclaration());\n\n // Replace the whole component\n if (decl?.isClassDeclaration()) {\n mutate(decl, (p) => {\n p.replaceWith(t.functionDeclaration(decl.node.id, [], emptyBody));\n });\n\n return;\n }\n }\n\n const body = scopePath.get('body');\n if (Array.isArray(body)) {\n throw new Error(\n \"A body of a function is expected to be a single element but an array was returned. It's possible if JS syntax has been changed since that code was written.\"\n );\n }\n\n const node: typeof scopePath.node = {\n ...scopePath.node,\n body: emptyBody,\n params: [],\n };\n\n mutate(scopePath, (p) => {\n p.replaceWith(node);\n });\n } else {\n mutate(path, (p) => {\n p.replaceWith(nullLiteral);\n });\n }\n}\n"],"mappings":";;;;;;;AAAA;;AAQA;;AACA;;AAEA,SAASA,eAAT,CAAyBC,IAAzB,EAAsE;EACpE,IAAIA,IAAI,CAACC,aAAL,MAAwBC,WAAA,CAAEC,YAAF,CAAeH,IAAI,CAACI,IAAL,CAAUC,GAAzB,CAA5B,EAA2D;IACzD,OAAOL,IAAI,CAACI,IAAL,CAAUC,GAAV,CAAcC,IAArB;EACD;;EAED,OAAO,IAAP;AACD;;AAEc,SAASC,kBAAT,CACbP,IADa,EAEb;EACA;EACA,MAAMQ,WAAW,GAAGN,WAAA,CAAEM,WAAF,EAApB,CAFA,CAIA;EACA;;;EACA,MAAMC,aAAa,GAAG,IAAAC,kBAAA,EAASV,IAAT,EAAeW,iBAAf,EAAtB;EACA,MAAMC,SAAS,GAAGH,aAAH,aAAGA,aAAH,uBAAGA,aAAa,CAAET,IAAjC;;EACA,IAAIY,SAAJ,aAAIA,SAAJ,eAAIA,SAAS,CAAEC,UAAX,EAAJ,EAA6B;IAC3B,MAAMC,SAAS,GAAGZ,WAAA,CAAEa,cAAF,CAAiB,CAACb,WAAA,CAAEc,eAAF,CAAkBR,WAAlB,CAAD,CAAjB,CAAlB,CAD2B,CAG3B;;;IACA,IAAIT,eAAe,CAACa,SAAD,CAAf,KAA+B,QAAnC,EAA6C;MAC3C,MAAMK,IAAI,GAAGL,SAAS,CAACM,UAAV,CAAsBC,CAAD,IAAOA,CAAC,CAACC,kBAAF,EAA5B,CAAb,CAD2C,CAG3C;;MACA,IAAIH,IAAJ,aAAIA,IAAJ,eAAIA,IAAI,CAAEG,kBAAN,EAAJ,EAAgC;QAC9B,IAAAC,oBAAA,EAAOJ,IAAP,EAAcE,CAAD,IAAO;UAClBA,CAAC,CAACG,WAAF,CAAcpB,WAAA,CAAEqB,mBAAF,CAAsBN,IAAI,CAACb,IAAL,CAAUoB,EAAhC,EAAoC,EAApC,EAAwCV,SAAxC,CAAd;QACD,CAFD;QAIA;MACD;IACF;;IAED,MAAMW,IAAI,GAAGb,SAAS,CAACc,GAAV,CAAc,MAAd,CAAb;;IACA,IAAIC,KAAK,CAACC,OAAN,CAAcH,IAAd,CAAJ,EAAyB;MACvB,MAAM,IAAII,KAAJ,CACJ,6JADI,CAAN;IAGD;;IAED,MAAMzB,IAA2B,GAAG,EAClC,GAAGQ,SAAS,CAACR,IADqB;MAElCqB,IAAI,EAAEX,SAF4B;MAGlCgB,MAAM,EAAE;IAH0B,CAApC;IAMA,IAAAT,oBAAA,EAAOT,SAAP,EAAmBO,CAAD,IAAO;MACvBA,CAAC,CAACG,WAAF,CAAclB,IAAd;IACD,CAFD;EAGD,CAjCD,MAiCO;IACL,IAAAiB,oBAAA,EAAOrB,IAAP,EAAcmB,CAAD,IAAO;MAClBA,CAAC,CAACG,WAAF,CAAcd,WAAd;IACD,CAFD;EAGD;AACF"}
{
"name": "@linaria/utils",
"description": "Blazing fast zero-runtime CSS in JS library",
"version": "4.2.1",
"version": "4.2.2",
"bugs": "https://github.com/callstack/linaria/issues",

@@ -6,0 +6,0 @@ "dependencies": {

@@ -0,1 +1,2 @@

export type { IVariableContext } from './IVariableContext';
export { default as asyncResolveFallback, syncResolve, } from './asyncResolveFallback';

@@ -2,0 +3,0 @@ export { default as collectExportsAndImports } from './collectExportsAndImports';

import type { TransformOptions } from '@babel/core';
import type { IVariableContext } from '../IVariableContext';
import type { Core } from '../babel';

@@ -12,2 +13,3 @@ export declare type ClassNameSlugVars = {

export declare type ClassNameFn = (hash: string, title: string, args: ClassNameSlugVars) => string;
export declare type VariableNameFn = (context: IVariableContext) => string;
export declare type Evaluator = (filename: string, options: StrictOptions, text: string, only: string[] | null, babel: Core) => [string, Map<string, string[]> | null];

@@ -26,4 +28,5 @@ export declare type EvalRule = {

ignore?: RegExp;
rules: EvalRule[];
tagResolver?: (source: string, tag: string) => string | null;
rules: EvalRule[];
variableNameSlug?: string | VariableNameFn;
};