@wyw-in-js/transform 0.2.1 → 0.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/esm/index.js +1 -1
  2. package/esm/index.js.map +1 -1
  3. package/esm/plugins/shaker.js +21 -8
  4. package/esm/plugins/shaker.js.map +1 -1
  5. package/esm/shaker.js +1 -1
  6. package/esm/shaker.js.map +1 -1
  7. package/esm/transform/generators/createStylisPreprocessor.js +99 -0
  8. package/esm/transform/generators/createStylisPreprocessor.js.map +1 -0
  9. package/esm/transform/generators/extract.js +1 -29
  10. package/esm/transform/generators/extract.js.map +1 -1
  11. package/esm/transform/generators/transform.js +1 -0
  12. package/esm/transform/generators/transform.js.map +1 -1
  13. package/esm/transform/helpers/loadWywOptions.js +1 -1
  14. package/esm/transform/helpers/loadWywOptions.js.map +1 -1
  15. package/esm/utils/collectExportsAndImports.js +14 -10
  16. package/esm/utils/collectExportsAndImports.js.map +1 -1
  17. package/esm/utils/scopeHelpers.js +13 -0
  18. package/esm/utils/scopeHelpers.js.map +1 -1
  19. package/lib/index.js +2 -2
  20. package/lib/index.js.map +1 -1
  21. package/lib/plugins/shaker.js +22 -9
  22. package/lib/plugins/shaker.js.map +1 -1
  23. package/lib/shaker.js +2 -1
  24. package/lib/shaker.js.map +1 -1
  25. package/lib/transform/generators/createStylisPreprocessor.js +112 -0
  26. package/lib/transform/generators/createStylisPreprocessor.js.map +1 -0
  27. package/lib/transform/generators/extract.js +2 -32
  28. package/lib/transform/generators/extract.js.map +1 -1
  29. package/lib/transform/generators/transform.js +1 -0
  30. package/lib/transform/generators/transform.js.map +1 -1
  31. package/lib/transform/helpers/loadWywOptions.js +3 -4
  32. package/lib/transform/helpers/loadWywOptions.js.map +1 -1
  33. package/lib/utils/collectExportsAndImports.js +14 -10
  34. package/lib/utils/collectExportsAndImports.js.map +1 -1
  35. package/lib/utils/scopeHelpers.js +13 -0
  36. package/lib/utils/scopeHelpers.js.map +1 -1
  37. package/package.json +7 -7
  38. package/types/index.d.ts +1 -1
  39. package/types/index.js +2 -2
  40. package/types/plugins/shaker.js +24 -9
  41. package/types/shaker.d.ts +1 -1
  42. package/types/shaker.js +3 -1
  43. package/types/transform/generators/createStylisPreprocessor.d.ts +11 -0
  44. package/types/transform/generators/createStylisPreprocessor.js +137 -0
  45. package/types/transform/generators/extract.d.ts +0 -3
  46. package/types/transform/generators/extract.js +3 -38
  47. package/types/transform/generators/transform.js +1 -0
  48. package/types/transform/helpers/loadWywOptions.js +3 -6
  49. package/types/utils/collectExportsAndImports.js +14 -10
  50. package/types/utils/scopeHelpers.js +13 -0
@@ -1 +1 @@
1
- {"version":3,"file":"scopeHelpers.js","names":["_types","require","_findIdentifiers","_getScope","_isNotNull","_isRemoved","validateField","node","key","val","field","validate","optional","getBinding","path","binding","getScope","name","undefined","reference","referencePath","force","isReferencedIdentifier","referencePaths","includes","referenced","push","references","length","isReferenced","kind","isFunctionExpression","parentPath","isVariableDeclarator","id","get","isIdentifier","idBinding","every","i","find","ancestor","isTSType","isFlowType","isReferencedConstantViolation","p","isAssignmentExpression","isExpressionStatement","dereference","isReference","referencesInConstantViolations","constantViolations","filter","isConstantViolation","nonTypeReferences","nonType","dereferenceAll","findIdentifiers","map","identifierPath","isNotNull","referenceAll","forEach","deletingNodes","WeakSet","isEmptyList","list","has","getPathFromAction","action","Array","isArray","Error","isPrototypeAssignment","left","type","object","property","canFunctionBeDelete","fnPath","fnScope","scope","parentScope","parent","listKey","findActionForNode","isRemoved","add","isProgram","isClassDeclaration","isClassExpression","body","isFunction","isBlockStatement","async","directives","generator","params","isConditionalExpression","alternate","isLogicalExpression","operator","value","right","isObjectProperty","maybeDefineProperty","isCallExpression","matchesPattern","isTemplateLiteral","isForInStatement","isFunctionDeclaration","isObjectMethod","isClassMethod","prevStatement","isIfStatement","isReturnStatement","slice","statement","isExportNamedDeclaration","declaration","isTryStatement","NODE_FIELDS","referenceEnums","program","traverse","ExpressionStatement","expressionStatement","expression","callee","args","arg","fixed","removeUnreferenced","items","Set","item","hasReferences","forDeleting","identifier","removeWithRelated","result","sort","a","b","_a$node","_b$node","localeCompare","getNodeForValue","staticEvaluate","evaluated","evaluate","confident","applyAction","test","isBooleanLiteral","consequent","mutate","remove","replaceWith","paths","rootPath","getProgramParent","actions","affectedPaths","referencedIdentifiers","_a$node2","_b$node2","referencesOfBinding","_ref","reduce","acc","ref","isExportDefaultDeclaration","clean","_i$node","join","_i$node2","fn","dereferenced","mutated","dead","assignments","assignment","declared","Object","values","getOuterBindingIdentifiers","init","_assignment$parentPat","_scope$getBinding","Identifier","isArrayPattern","elements"],"sources":["../../src/utils/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 {\n FieldOptions,\n Function as FunctionNode,\n Identifier,\n JSXIdentifier,\n Node,\n Program,\n} from '@babel/types';\nimport { NODE_FIELDS } from '@babel/types';\n\nimport { findIdentifiers, nonType } from './findIdentifiers';\nimport { getScope } from './getScope';\nimport { isNotNull } from './isNotNull';\nimport { isRemoved } from './isRemoved';\n\nfunction validateField(\n node: Node,\n key: string,\n val: unknown,\n field: FieldOptions\n) {\n if (!(field != null && field.validate)) return true;\n if (field.optional && val == null) return true;\n try {\n field.validate(node, key, val);\n return true;\n } catch {\n return false;\n }\n}\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.referencePaths.push(referencePath ?? path);\n binding.references = binding.referencePaths.length;\n}\n\nfunction isReferenced(binding: Binding): boolean {\n const { kind, referenced, referencePaths, path } = binding;\n\n if (\n path.isFunctionExpression() &&\n path.key === 'init' &&\n path.parentPath.isVariableDeclarator()\n ) {\n // It is a function expression in a variable declarator\n const id = path.parentPath.get('id');\n if (id.isIdentifier()) {\n const idBinding = getBinding(id);\n return idBinding ? isReferenced(idBinding) : true;\n }\n\n return true;\n }\n\n if (!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 ((kind as string) === 'param') {\n return true;\n }\n\n // If all remaining references are in TS/Flow types, binding is unreferenced\n return (\n referencePaths.length > 0 ||\n referencePaths.every((i) =>\n i.find((ancestor) => ancestor.isTSType() || ancestor.isFlowType())\n )\n );\n}\n\nfunction isReferencedConstantViolation(path: NodePath, binding: Binding) {\n if (path.find((p) => p === binding.path)) {\n // function a(flag) { return (a = function(flag) { flag ? 1 : 2 }) }\n // ^ Looks crazy, yeh? Welcome to the wonderful world of transpilers!\n // `a = …` here isn't a reference.\n return false;\n }\n\n if (!path.isReferenced()) {\n return false;\n }\n\n if (\n path.isAssignmentExpression() &&\n path.parentPath.isExpressionStatement()\n ) {\n // A root assignment without a parent expression statement is not a reference\n return false;\n }\n\n return true;\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 const isReference = binding.referencePaths.includes(path);\n let referencesInConstantViolations = binding.constantViolations.filter((i) =>\n isReferencedConstantViolation(i, binding)\n );\n\n const isConstantViolation = referencesInConstantViolations.includes(path);\n\n if (!isReference && !isConstantViolation) {\n return null;\n }\n\n if (isReference) {\n binding.referencePaths = binding.referencePaths.filter((i) => i !== path);\n binding.references -= 1;\n } else {\n referencesInConstantViolations = referencesInConstantViolations.filter(\n (i) => i !== path\n );\n }\n\n const nonTypeReferences = binding.referencePaths.filter(nonType);\n binding.referenced =\n nonTypeReferences.length + referencesInConstantViolations.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\nconst isEmptyList = (list: NodePath[]) =>\n list.length === 0 || list.every((i) => deletingNodes.has(i));\n\ntype ReplaceAction = [action: 'replace', what: NodePath, by: Node];\ntype RemoveAction = [action: 'remove', what: NodePath];\n\nconst getPathFromAction = (action: RemoveAction | ReplaceAction) => {\n if (!Array.isArray(action)) {\n return action;\n }\n\n if (action[0] === 'replace' || action[0] === 'remove') {\n return action[1];\n }\n\n throw new Error(`Unknown action type: ${action[0]}`);\n};\n\nfunction isPrototypeAssignment(path: NodePath) {\n if (!path.isAssignmentExpression()) {\n return false;\n }\n\n const { left } = path.node;\n if (!left) {\n return false;\n }\n\n if (left.type !== 'MemberExpression') {\n return false;\n }\n\n const { object, property } = left;\n if (!object || !property) {\n return false;\n }\n\n return (\n object.type === 'MemberExpression' &&\n object.property.type === 'Identifier' &&\n object.property.name === 'prototype'\n );\n}\n\nfunction canFunctionBeDelete(fnPath: NodePath<FunctionNode>) {\n if (isPrototypeAssignment(fnPath.parentPath)) {\n // It is a prototype assignment, we can't delete it since we can't find all usages\n return false;\n }\n\n const fnScope = fnPath.scope;\n const parentScope = fnScope.parent;\n if (parentScope.parent) {\n // It isn't a top-level function, so we can't delete it\n return true;\n }\n\n if (fnPath.listKey === 'arguments') {\n // It is passed as an argument to another function, we can't delete it\n return true;\n }\n\n return false;\n}\n\nexport function findActionForNode(\n path: NodePath\n): RemoveAction | ReplaceAction | null {\n if (isRemoved(path)) return null;\n\n deletingNodes.add(path);\n\n const parent = path.parentPath;\n\n if (!parent) return ['remove', path];\n\n if (parent.isProgram()) {\n // Do not delete Program node\n return ['remove', path];\n }\n\n if (parent.isClassDeclaration() || parent.isClassExpression()) {\n if (path.key === 'body') {\n return ['replace', path, { type: 'ClassBody', body: [] }];\n }\n }\n\n if (parent.isFunction()) {\n if (path.listKey === 'params') {\n // Do not remove params of functions\n return null;\n }\n\n if (\n (path.isBlockStatement() && isEmptyList(path.get('body'))) ||\n path === parent.get('body')\n ) {\n if (!canFunctionBeDelete(parent)) {\n return [\n 'replace',\n parent,\n {\n ...parent.node,\n async: false,\n body: {\n type: 'BlockStatement',\n body: [],\n directives: [],\n },\n generator: false,\n params: [],\n },\n ];\n }\n }\n }\n\n if (parent.isConditionalExpression()) {\n if (path.key === 'test') {\n return ['replace', parent, parent.node.alternate];\n }\n\n if (path.key === 'consequent') {\n return ['replace', path, { type: 'Identifier', name: 'undefined' }];\n }\n\n if (path.key === 'alternate') {\n return ['replace', path, { type: 'Identifier', name: 'undefined' }];\n }\n }\n\n if (parent.isLogicalExpression({ operator: '&&' })) {\n return [\n 'replace',\n parent,\n {\n type: 'BooleanLiteral',\n value: false,\n },\n ];\n }\n\n if (parent.isLogicalExpression({ operator: '||' })) {\n return [\n 'replace',\n parent,\n path.key === 'left' ? parent.node.right : parent.node.left,\n ];\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 findActionForNode(maybeDefineProperty);\n }\n }\n\n return findActionForNode(parent);\n }\n\n if (parent.isTemplateLiteral()) {\n return [\n 'replace',\n path,\n {\n type: 'StringLiteral',\n value: '',\n },\n ];\n }\n\n if (parent.isAssignmentExpression()) {\n return findActionForNode(parent);\n }\n\n if (parent.isCallExpression()) {\n return findActionForNode(parent);\n }\n\n if (parent.isForInStatement({ left: path.node })) {\n return findActionForNode(parent);\n }\n\n if (\n parent.isFunctionExpression({ body: path.node }) ||\n parent.isFunctionDeclaration() ||\n parent.isObjectMethod() ||\n parent.isClassMethod()\n ) {\n return findActionForNode(parent);\n }\n\n if (parent.isBlockStatement()) {\n const body = parent.get('body');\n if (isEmptyList(body)) {\n return findActionForNode(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 findActionForNode(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 findActionForNode(parent);\n }\n }\n }\n\n if (parent.isVariableDeclarator()) {\n return findActionForNode(parent);\n }\n\n if (\n parent.isExportNamedDeclaration() &&\n ((path.key === 'specifiers' && isEmptyList(parent.get('specifiers'))) ||\n (path.key === 'declaration' && parent.node.declaration === path.node))\n ) {\n return findActionForNode(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 (isEmptyList(list)) {\n return findActionForNode(parent);\n }\n }\n }\n\n if (parent.isTryStatement()) {\n return findActionForNode(parent);\n }\n\n if (!path.listKey && path.key) {\n const field = NODE_FIELDS[parent.type][path.key];\n if (!validateField(parent.node, path.key as string, null, field)) {\n // The parent node isn't valid without this field, so we should remove it also.\n return findActionForNode(parent);\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 findActionForNode(parent);\n }\n }\n\n return ['remove', 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(findActionForNode)\n .filter(isNotNull)\n .map(getPathFromAction);\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 getNodeForValue(value: unknown): Node | undefined {\n if (typeof value === 'string') {\n return {\n type: 'StringLiteral',\n value,\n };\n }\n\n if (typeof value === 'number') {\n return {\n type: 'NumericLiteral',\n value,\n };\n }\n\n if (typeof value === 'boolean') {\n return {\n type: 'BooleanLiteral',\n value,\n };\n }\n\n if (value === null) {\n return {\n type: 'NullLiteral',\n };\n }\n\n if (value === undefined) {\n return {\n type: 'Identifier',\n name: 'undefined',\n };\n }\n\n return undefined;\n}\n\nfunction staticEvaluate(path: NodePath | null | undefined): void {\n if (!path) return;\n const evaluated = path.evaluate();\n if (evaluated.confident) {\n const node = getNodeForValue(evaluated.value);\n if (node) {\n applyAction(['replace', path, node]);\n return;\n }\n }\n\n if (path.isIfStatement()) {\n const test = path.get('test');\n if (!test.isBooleanLiteral()) {\n return;\n }\n\n const { consequent, alternate } = path.node;\n if (test.node.value) {\n applyAction(['replace', path, consequent]);\n } else if (alternate) {\n applyAction(['replace', path, alternate]);\n } else {\n applyAction(['remove', path]);\n }\n }\n}\n\nfunction applyAction(action: ReplaceAction | RemoveAction) {\n mutate(action[1], (p) => {\n if (isRemoved(p)) return;\n\n const parent = p.parentPath;\n\n if (action[0] === 'remove') {\n p.remove();\n }\n\n if (action[0] === 'replace') {\n p.replaceWith(action[2]);\n }\n\n staticEvaluate(parent);\n });\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 const actions: (ReplaceAction | RemoveAction)[] = paths\n .map(findActionForNode)\n .filter(isNotNull);\n\n const affectedPaths = actions.map(getPathFromAction);\n\n let referencedIdentifiers = findIdentifiers(affectedPaths, 'reference');\n referencedIdentifiers.sort(\n (a, b) => a.node?.name.localeCompare(b.node?.name)\n );\n\n const referencesOfBinding = findIdentifiers(affectedPaths, 'declaration')\n .map((i) => (i.node && getScope(i).getBinding(i.node.name)) ?? null)\n .filter(isNotNull)\n .reduce(\n (acc, i) => [...acc, ...i.referencePaths.filter(nonType)],\n [] as NodePath[]\n )\n .filter(\n (ref) =>\n // Do not remove `export default function`\n !ref.isExportDefaultDeclaration() ||\n !ref.get('declaration').isFunctionDeclaration()\n );\n\n actions.forEach(applyAction);\n\n removeWithRelated(referencesOfBinding);\n\n let clean = false;\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 const init = assignment.get('init');\n if (!Array.isArray(init) && init?.isAssignmentExpression()) {\n // `const a = b = 1` → `b = 1`\n assignment.parentPath?.replaceWith({\n type: 'ExpressionStatement',\n expression: init.node,\n });\n\n const left = init.get('left');\n if (left.isIdentifier()) {\n // If it was forcefully referenced in the shaker\n dereference(left);\n }\n\n return;\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 { applyAction, mutate, removeWithRelated };\n"],"mappings":"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"}
1
+ {"version":3,"file":"scopeHelpers.js","names":["_types","require","_findIdentifiers","_getScope","_isNotNull","_isRemoved","validateField","node","key","val","field","validate","optional","getBinding","path","binding","getScope","name","undefined","reference","referencePath","force","isReferencedIdentifier","referencePaths","includes","referenced","push","references","length","isReferenced","kind","isFunctionExpression","parentPath","isVariableDeclarator","id","get","isIdentifier","idBinding","every","i","find","ancestor","isTSType","isFlowType","isReferencedConstantViolation","p","isAssignmentExpression","isExpressionStatement","dereference","isReference","referencesInConstantViolations","constantViolations","filter","isConstantViolation","nonTypeReferences","nonType","dereferenceAll","findIdentifiers","map","identifierPath","isNotNull","referenceAll","forEach","deletingNodes","WeakSet","isEmptyList","list","has","getPathFromAction","action","Array","isArray","Error","isPrototypeAssignment","left","type","object","property","canFunctionBeDelete","fnPath","fnScope","scope","parentScope","parent","listKey","findActionForNode","isRemoved","add","isProgram","isClassDeclaration","isClassExpression","body","isFunction","isBlockStatement","async","directives","generator","params","isConditionalExpression","alternate","isLogicalExpression","operator","value","right","isObjectProperty","maybeDefineProperty","isCallExpression","matchesPattern","isTemplateLiteral","isForInStatement","isFunctionDeclaration","isObjectMethod","isClassMethod","prevStatement","isIfStatement","isReturnStatement","slice","statement","init","isExportNamedDeclaration","declaration","isTryStatement","NODE_FIELDS","referenceEnums","program","traverse","ExpressionStatement","expressionStatement","expression","callee","args","arg","fixed","removeUnreferenced","items","Set","item","hasReferences","forDeleting","identifier","removeWithRelated","result","sort","a","b","_a$node","_b$node","localeCompare","getNodeForValue","staticEvaluate","evaluated","evaluate","confident","applyAction","test","isBooleanLiteral","consequent","mutate","remove","replaceWith","paths","rootPath","getProgramParent","actions","affectedPaths","referencedIdentifiers","_a$node2","_b$node2","referencesOfBinding","_ref","reduce","acc","ref","isExportDefaultDeclaration","clean","_i$node","join","_i$node2","fn","dereferenced","mutated","dead","assignments","assignment","declared","Object","values","getOuterBindingIdentifiers","_assignment$parentPat","_scope$getBinding","Identifier","isArrayPattern","elements"],"sources":["../../src/utils/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 {\n FieldOptions,\n Function as FunctionNode,\n Identifier,\n JSXIdentifier,\n Node,\n Program,\n} from '@babel/types';\nimport { NODE_FIELDS } from '@babel/types';\n\nimport { findIdentifiers, nonType } from './findIdentifiers';\nimport { getScope } from './getScope';\nimport { isNotNull } from './isNotNull';\nimport { isRemoved } from './isRemoved';\n\nfunction validateField(\n node: Node,\n key: string,\n val: unknown,\n field: FieldOptions\n) {\n if (!(field != null && field.validate)) return true;\n if (field.optional && val == null) return true;\n try {\n field.validate(node, key, val);\n return true;\n } catch {\n return false;\n }\n}\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.referencePaths.push(referencePath ?? path);\n binding.references = binding.referencePaths.length;\n}\n\nfunction isReferenced(binding: Binding): boolean {\n const { kind, referenced, referencePaths, path } = binding;\n\n if (\n path.isFunctionExpression() &&\n path.key === 'init' &&\n path.parentPath.isVariableDeclarator()\n ) {\n // It is a function expression in a variable declarator\n const id = path.parentPath.get('id');\n if (id.isIdentifier()) {\n const idBinding = getBinding(id);\n return idBinding ? isReferenced(idBinding) : true;\n }\n\n return true;\n }\n\n if (!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 ((kind as string) === 'param') {\n return true;\n }\n\n // If all remaining references are in TS/Flow types, binding is unreferenced\n return (\n referencePaths.length > 0 ||\n referencePaths.every((i) =>\n i.find((ancestor) => ancestor.isTSType() || ancestor.isFlowType())\n )\n );\n}\n\nfunction isReferencedConstantViolation(path: NodePath, binding: Binding) {\n if (path.find((p) => p === binding.path)) {\n // function a(flag) { return (a = function(flag) { flag ? 1 : 2 }) }\n // ^ Looks crazy, yeh? Welcome to the wonderful world of transpilers!\n // `a = …` here isn't a reference.\n return false;\n }\n\n if (!path.isReferenced()) {\n return false;\n }\n\n if (\n path.isAssignmentExpression() &&\n path.parentPath.isExpressionStatement()\n ) {\n // A root assignment without a parent expression statement is not a reference\n return false;\n }\n\n return true;\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 const isReference = binding.referencePaths.includes(path);\n let referencesInConstantViolations = binding.constantViolations.filter((i) =>\n isReferencedConstantViolation(i, binding)\n );\n\n const isConstantViolation = referencesInConstantViolations.includes(path);\n\n if (!isReference && !isConstantViolation) {\n return null;\n }\n\n if (isReference) {\n binding.referencePaths = binding.referencePaths.filter((i) => i !== path);\n binding.references -= 1;\n } else {\n referencesInConstantViolations = referencesInConstantViolations.filter(\n (i) => i !== path\n );\n }\n\n const nonTypeReferences = binding.referencePaths.filter(nonType);\n binding.referenced =\n nonTypeReferences.length + referencesInConstantViolations.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\nconst isEmptyList = (list: NodePath[]) =>\n list.length === 0 || list.every((i) => deletingNodes.has(i));\n\ntype ReplaceAction = [action: 'replace', what: NodePath, by: Node];\ntype RemoveAction = [action: 'remove', what: NodePath];\n\nconst getPathFromAction = (action: RemoveAction | ReplaceAction) => {\n if (!Array.isArray(action)) {\n return action;\n }\n\n if (action[0] === 'replace' || action[0] === 'remove') {\n return action[1];\n }\n\n throw new Error(`Unknown action type: ${action[0]}`);\n};\n\nfunction isPrototypeAssignment(path: NodePath) {\n if (!path.isAssignmentExpression()) {\n return false;\n }\n\n const { left } = path.node;\n if (!left) {\n return false;\n }\n\n if (left.type !== 'MemberExpression') {\n return false;\n }\n\n const { object, property } = left;\n if (!object || !property) {\n return false;\n }\n\n return (\n object.type === 'MemberExpression' &&\n object.property.type === 'Identifier' &&\n object.property.name === 'prototype'\n );\n}\n\nfunction canFunctionBeDelete(fnPath: NodePath<FunctionNode>) {\n if (isPrototypeAssignment(fnPath.parentPath)) {\n // It is a prototype assignment, we can't delete it since we can't find all usages\n return false;\n }\n\n const fnScope = fnPath.scope;\n const parentScope = fnScope.parent;\n if (parentScope.parent) {\n // It isn't a top-level function, so we can't delete it\n return true;\n }\n\n if (fnPath.listKey === 'arguments') {\n // It is passed as an argument to another function, we can't delete it\n return true;\n }\n\n return false;\n}\n\nexport function findActionForNode(\n path: NodePath\n): RemoveAction | ReplaceAction | null {\n if (isRemoved(path)) return null;\n\n deletingNodes.add(path);\n\n const parent = path.parentPath;\n\n if (!parent) return ['remove', path];\n\n if (parent.isProgram()) {\n // Do not delete Program node\n return ['remove', path];\n }\n\n if (parent.isClassDeclaration() || parent.isClassExpression()) {\n if (path.key === 'body') {\n return ['replace', path, { type: 'ClassBody', body: [] }];\n }\n }\n\n if (parent.isFunction()) {\n if (path.listKey === 'params') {\n // Do not remove params of functions\n return null;\n }\n\n if (\n (path.isBlockStatement() && isEmptyList(path.get('body'))) ||\n path === parent.get('body')\n ) {\n if (!canFunctionBeDelete(parent)) {\n return [\n 'replace',\n parent,\n {\n ...parent.node,\n async: false,\n body: {\n type: 'BlockStatement',\n body: [],\n directives: [],\n },\n generator: false,\n params: [],\n },\n ];\n }\n }\n }\n\n if (parent.isConditionalExpression()) {\n if (path.key === 'test') {\n return ['replace', parent, parent.node.alternate];\n }\n\n if (path.key === 'consequent') {\n return ['replace', path, { type: 'Identifier', name: 'undefined' }];\n }\n\n if (path.key === 'alternate') {\n return ['replace', path, { type: 'Identifier', name: 'undefined' }];\n }\n }\n\n if (parent.isLogicalExpression({ operator: '&&' })) {\n return [\n 'replace',\n parent,\n {\n type: 'BooleanLiteral',\n value: false,\n },\n ];\n }\n\n if (parent.isLogicalExpression({ operator: '||' })) {\n return [\n 'replace',\n parent,\n path.key === 'left' ? parent.node.right : parent.node.left,\n ];\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 findActionForNode(maybeDefineProperty);\n }\n }\n\n return findActionForNode(parent);\n }\n\n if (parent.isTemplateLiteral()) {\n return [\n 'replace',\n path,\n {\n type: 'StringLiteral',\n value: '',\n },\n ];\n }\n\n if (parent.isAssignmentExpression()) {\n if (path.isAssignmentExpression()) {\n // `foo = bar = 42` should be replaced with `foo = 42`\n return ['replace', path, path.node.right];\n }\n\n return findActionForNode(parent);\n }\n\n if (parent.isCallExpression()) {\n return findActionForNode(parent);\n }\n\n if (parent.isForInStatement({ left: path.node })) {\n return findActionForNode(parent);\n }\n\n if (\n parent.isFunctionExpression({ body: path.node }) ||\n parent.isFunctionDeclaration() ||\n parent.isObjectMethod() ||\n parent.isClassMethod()\n ) {\n return findActionForNode(parent);\n }\n\n if (parent.isBlockStatement()) {\n const body = parent.get('body');\n if (isEmptyList(body)) {\n return findActionForNode(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 findActionForNode(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 findActionForNode(parent);\n }\n }\n }\n\n if (parent.isVariableDeclarator()) {\n if (path.key === 'init' && path.isAssignmentExpression()) {\n // We are removing `bar` in `var foo = bar = 42`. Path should be replaced with `var foo = 42`\n return ['replace', path, path.node.right];\n }\n\n const init = parent.get('init');\n if (path.key === 'id' && init.isAssignmentExpression()) {\n // We are removing `foo` in `var foo = bar = 42`. Ignore it.\n return null;\n }\n\n return findActionForNode(parent);\n }\n\n if (\n parent.isExportNamedDeclaration() &&\n ((path.key === 'specifiers' && isEmptyList(parent.get('specifiers'))) ||\n (path.key === 'declaration' && parent.node.declaration === path.node))\n ) {\n return findActionForNode(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 (isEmptyList(list)) {\n return findActionForNode(parent);\n }\n }\n }\n\n if (parent.isTryStatement()) {\n return findActionForNode(parent);\n }\n\n if (!path.listKey && path.key) {\n const field = NODE_FIELDS[parent.type][path.key];\n if (!validateField(parent.node, path.key as string, null, field)) {\n // The parent node isn't valid without this field, so we should remove it also.\n return findActionForNode(parent);\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 findActionForNode(parent);\n }\n }\n\n return ['remove', 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(findActionForNode)\n .filter(isNotNull)\n .map(getPathFromAction);\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 getNodeForValue(value: unknown): Node | undefined {\n if (typeof value === 'string') {\n return {\n type: 'StringLiteral',\n value,\n };\n }\n\n if (typeof value === 'number') {\n return {\n type: 'NumericLiteral',\n value,\n };\n }\n\n if (typeof value === 'boolean') {\n return {\n type: 'BooleanLiteral',\n value,\n };\n }\n\n if (value === null) {\n return {\n type: 'NullLiteral',\n };\n }\n\n if (value === undefined) {\n return {\n type: 'Identifier',\n name: 'undefined',\n };\n }\n\n return undefined;\n}\n\nfunction staticEvaluate(path: NodePath | null | undefined): void {\n if (!path) return;\n const evaluated = path.evaluate();\n if (evaluated.confident) {\n const node = getNodeForValue(evaluated.value);\n if (node) {\n applyAction(['replace', path, node]);\n return;\n }\n }\n\n if (path.isIfStatement()) {\n const test = path.get('test');\n if (!test.isBooleanLiteral()) {\n return;\n }\n\n const { consequent, alternate } = path.node;\n if (test.node.value) {\n applyAction(['replace', path, consequent]);\n } else if (alternate) {\n applyAction(['replace', path, alternate]);\n } else {\n applyAction(['remove', path]);\n }\n }\n}\n\nfunction applyAction(action: ReplaceAction | RemoveAction) {\n mutate(action[1], (p) => {\n if (isRemoved(p)) return;\n\n const parent = p.parentPath;\n\n if (action[0] === 'remove') {\n p.remove();\n }\n\n if (action[0] === 'replace') {\n p.replaceWith(action[2]);\n }\n\n staticEvaluate(parent);\n });\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 const actions: (ReplaceAction | RemoveAction)[] = paths\n .map(findActionForNode)\n .filter(isNotNull);\n\n const affectedPaths = actions.map(getPathFromAction);\n\n let referencedIdentifiers = findIdentifiers(affectedPaths, 'reference');\n referencedIdentifiers.sort(\n (a, b) => a.node?.name.localeCompare(b.node?.name)\n );\n\n const referencesOfBinding = findIdentifiers(affectedPaths, 'declaration')\n .map((i) => (i.node && getScope(i).getBinding(i.node.name)) ?? null)\n .filter(isNotNull)\n .reduce(\n (acc, i) => [...acc, ...i.referencePaths.filter(nonType)],\n [] as NodePath[]\n )\n .filter(\n (ref) =>\n // Do not remove `export default function`\n !ref.isExportDefaultDeclaration() ||\n !ref.get('declaration').isFunctionDeclaration()\n );\n\n actions.forEach(applyAction);\n\n removeWithRelated(referencesOfBinding);\n\n let clean = false;\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 const init = assignment.get('init');\n if (!Array.isArray(init) && init?.isAssignmentExpression()) {\n // `const a = b = 1` → `b = 1`\n assignment.parentPath?.replaceWith({\n type: 'ExpressionStatement',\n expression: init.node,\n });\n\n const left = init.get('left');\n if (left.isIdentifier()) {\n // If it was forcefully referenced in the shaker\n dereference(left);\n }\n\n return;\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 { applyAction, mutate, removeWithRelated };\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wyw-in-js/transform",
3
- "version": "0.2.1",
3
+ "version": "0.2.3",
4
4
  "dependencies": {
5
5
  "@babel/core": "^7.23.5",
6
6
  "@babel/generator": "^7.23.5",
@@ -15,8 +15,8 @@
15
15
  "source-map": "^0.7.4",
16
16
  "stylis": "^4.3.0",
17
17
  "ts-invariant": "^0.10.3",
18
- "@wyw-in-js/processor-utils": "0.2.1",
19
- "@wyw-in-js/shared": "0.2.1"
18
+ "@wyw-in-js/processor-utils": "0.2.3",
19
+ "@wyw-in-js/shared": "0.2.3"
20
20
  },
21
21
  "devDependencies": {
22
22
  "@babel/plugin-syntax-typescript": "^7.23.3",
@@ -37,10 +37,10 @@
37
37
  "glob": "^10.3.10",
38
38
  "strip-ansi": "^5.2.0",
39
39
  "typescript": "^5.2.2",
40
- "@wyw-in-js/babel-config": "0.2.1",
41
- "@wyw-in-js/eslint-config": "0.2.1",
42
- "@wyw-in-js/jest-preset": "0.2.1",
43
- "@wyw-in-js/ts-config": "0.2.1"
40
+ "@wyw-in-js/babel-config": "0.2.3",
41
+ "@wyw-in-js/eslint-config": "0.2.3",
42
+ "@wyw-in-js/jest-preset": "0.2.3",
43
+ "@wyw-in-js/ts-config": "0.2.3"
44
44
  },
45
45
  "engines": {
46
46
  "node": ">=16.0.0"
package/types/index.d.ts CHANGED
@@ -17,7 +17,7 @@ export type { LoadAndParseFn } from './transform/Entrypoint.types';
17
17
  export { baseHandlers } from './transform/generators';
18
18
  export { prepareCode } from './transform/generators/transform';
19
19
  export { Entrypoint } from './transform/Entrypoint';
20
- export { transformUrl } from './transform/generators/extract';
20
+ export { transformUrl } from './transform/generators/createStylisPreprocessor';
21
21
  export { asyncResolveImports, syncResolveImports, } from './transform/generators/resolveImports';
22
22
  export { loadWywOptions } from './transform/helpers/loadWywOptions';
23
23
  export { withDefaultServices } from './transform/helpers/withDefaultServices';
package/types/index.js CHANGED
@@ -50,8 +50,8 @@ var transform_2 = require("./transform/generators/transform");
50
50
  Object.defineProperty(exports, "prepareCode", { enumerable: true, get: function () { return transform_2.prepareCode; } });
51
51
  var Entrypoint_1 = require("./transform/Entrypoint");
52
52
  Object.defineProperty(exports, "Entrypoint", { enumerable: true, get: function () { return Entrypoint_1.Entrypoint; } });
53
- var extract_1 = require("./transform/generators/extract");
54
- Object.defineProperty(exports, "transformUrl", { enumerable: true, get: function () { return extract_1.transformUrl; } });
53
+ var createStylisPreprocessor_1 = require("./transform/generators/createStylisPreprocessor");
54
+ Object.defineProperty(exports, "transformUrl", { enumerable: true, get: function () { return createStylisPreprocessor_1.transformUrl; } });
55
55
  var resolveImports_1 = require("./transform/generators/resolveImports");
56
56
  Object.defineProperty(exports, "asyncResolveImports", { enumerable: true, get: function () { return resolveImports_1.asyncResolveImports; } });
57
57
  Object.defineProperty(exports, "syncResolveImports", { enumerable: true, get: function () { return resolveImports_1.syncResolveImports; } });
@@ -59,24 +59,29 @@ function rearrangeExports({ types: t }, root, exportRefs, exports) {
59
59
  t.variableDeclaration('var', [t.variableDeclarator(t.identifier(uid))]),
60
60
  ]);
61
61
  rootScope.registerDeclaration(declaration);
62
+ const constantViolations = [];
62
63
  // Replace every reference with defined variable
63
64
  refs.forEach((ref) => {
64
65
  const [replaced] = ref.replaceWith(t.identifier(uid));
65
66
  if (replaced.isBindingIdentifier()) {
66
- rootScope.registerConstantViolation(replaced);
67
- if (replaced.parentPath?.parentPath?.isVariableDeclarator()) {
68
- // This is `const foo = exports.foo = "value"` case
69
- (0, scopeHelpers_1.reference)(replaced, replaced, true);
70
- }
67
+ constantViolations.push(replaced);
71
68
  }
72
69
  else {
73
70
  (0, scopeHelpers_1.reference)(replaced);
74
71
  }
75
72
  });
76
- // Assign defined variable to the export
77
- const [pushed] = root.pushContainer('body', [
78
- t.expressionStatement(t.assignmentExpression('=', t.memberExpression(t.identifier('exports'), t.identifier(name)), t.identifier(uid))),
79
- ]);
73
+ constantViolations.forEach((id) => {
74
+ rootScope.registerConstantViolation(id);
75
+ });
76
+ const assigmentToExport = t.expressionStatement(t.assignmentExpression('=', t.memberExpression(t.identifier('exports'), t.identifier(name)), t.identifier(uid)));
77
+ // export.foo = _foo will be inserted either after the last _foo assigment or in the end of the file
78
+ const body = root.get('body');
79
+ const lastViolation = constantViolations[constantViolations.length - 1] ??
80
+ body[body.length - 1];
81
+ const pathInRoot = root
82
+ .get('body')
83
+ .find((n) => lastViolation.isDescendant(n));
84
+ const [pushed] = pathInRoot.insertAfter(assigmentToExport);
80
85
  const local = pushed.get('expression.right');
81
86
  (0, scopeHelpers_1.reference)(local);
82
87
  rearranged[name] = local;
@@ -253,6 +258,16 @@ function shakerPlugin(babel, { keepSideEffects = false, ifUnknownExport = 'skip-
253
258
  }
254
259
  });
255
260
  dereferenced = [];
261
+ // Find and mark for deleting all unreferenced variables
262
+ const unreferenced = Object.values(file.scope.getAllBindings()).filter((i) => !i.referenced);
263
+ for (const binding of unreferenced) {
264
+ if (binding.path.isVariableDeclarator() &&
265
+ !forDeleting.includes(binding.path.get('id'))) {
266
+ forDeleting.push(...binding.constantViolations);
267
+ forDeleting.push(binding.path.get('id'));
268
+ changed = true;
269
+ }
270
+ }
256
271
  }
257
272
  }
258
273
  this.imports = withoutRemoved(collected.imports);
package/types/shaker.d.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  import type { Evaluator } from '@wyw-in-js/shared';
2
- declare const shaker: Evaluator;
2
+ export declare const shaker: Evaluator;
3
3
  export default shaker;
package/types/shaker.js CHANGED
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.shaker = void 0;
3
4
  const ShakerMetadata_1 = require("./utils/ShakerMetadata");
4
5
  const getPluginKey_1 = require("./utils/getPluginKey");
5
6
  const hasKeyInList = (plugin, list) => {
@@ -61,4 +62,5 @@ const shaker = (evalConfig, ast, code, { highPriorityPlugins, ...config }, babel
61
62
  transformed.metadata.wywEvaluator.imports,
62
63
  ];
63
64
  };
64
- exports.default = shaker;
65
+ exports.shaker = shaker;
66
+ exports.default = exports.shaker;
@@ -0,0 +1,11 @@
1
+ /// <reference types="node" />
2
+ import * as path from 'path';
3
+ import type { Middleware } from 'stylis';
4
+ import type { Options } from '../../types';
5
+ export declare function transformUrl(url: string, outputFilename: string, sourceFilename: string, platformPath?: typeof path): string;
6
+ /**
7
+ * Stylis plugin that mimics :global() selector behavior from Stylis v3.
8
+ */
9
+ export declare const stylisGlobalPlugin: Middleware;
10
+ export declare function createStylisUrlReplacePlugin(filename: string, outputFilename: string | undefined): Middleware;
11
+ export declare function createStylisPreprocessor(options: Options): (selector: string, text: string) => string;
@@ -0,0 +1,137 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.createStylisPreprocessor = exports.createStylisUrlReplacePlugin = exports.stylisGlobalPlugin = exports.transformUrl = void 0;
27
+ const path = __importStar(require("path"));
28
+ const stylis_1 = require("stylis");
29
+ const POSIX_SEP = path.posix.sep;
30
+ function transformUrl(url, outputFilename, sourceFilename, platformPath = path) {
31
+ // Replace asset path with new path relative to the output CSS
32
+ const relative = platformPath.relative(platformPath.dirname(outputFilename),
33
+ // Get the absolute path to the asset from the path relative to the JS file
34
+ platformPath.resolve(platformPath.dirname(sourceFilename), url));
35
+ if (platformPath.sep === POSIX_SEP) {
36
+ return relative;
37
+ }
38
+ return relative.split(platformPath.sep).join(POSIX_SEP);
39
+ }
40
+ exports.transformUrl = transformUrl;
41
+ /**
42
+ * Stylis plugin that mimics :global() selector behavior from Stylis v3.
43
+ */
44
+ const stylisGlobalPlugin = (element) => {
45
+ function getGlobalSelectorModifiers(value) {
46
+ const match = value.match(/(&\f( )?)?:global\(/);
47
+ if (match === null) {
48
+ throw new Error(`Failed to match :global() selector in "${value}". Please report a bug if it happens.`);
49
+ }
50
+ const [, baseSelector, spaceDelimiter] = match;
51
+ return {
52
+ includeBaseSelector: !!baseSelector,
53
+ includeSpaceDelimiter: !!spaceDelimiter,
54
+ };
55
+ }
56
+ switch (element.type) {
57
+ case stylis_1.RULESET:
58
+ if (typeof element.props === 'string') {
59
+ if (process.env.NODE_ENV !== 'production') {
60
+ throw new Error(`"element.props" has type "string" (${JSON.stringify(element.props, null, 2)}), it's not expected. Please report a bug if it happens.`);
61
+ }
62
+ return;
63
+ }
64
+ Object.assign(element, {
65
+ props: element.props.map((cssSelector) => {
66
+ // Avoids calling tokenize() on every string
67
+ if (!cssSelector.includes(':global(')) {
68
+ return cssSelector;
69
+ }
70
+ if (element.children.length === 0) {
71
+ Object.assign(element, {
72
+ global: getGlobalSelectorModifiers(element.value),
73
+ });
74
+ return cssSelector;
75
+ }
76
+ const { includeBaseSelector, includeSpaceDelimiter } = element.parent?.global || getGlobalSelectorModifiers(element.value);
77
+ const tokens = (0, stylis_1.tokenize)(cssSelector);
78
+ let selector = '';
79
+ for (let i = 0, len = tokens.length; i < len; i++) {
80
+ const token = tokens[i];
81
+ //
82
+ // Match for ":global("
83
+ if (token === ':' && tokens[i + 1] === 'global') {
84
+ //
85
+ // Match for ":global()"
86
+ if (tokens[i + 2] === '()') {
87
+ selector = [
88
+ ...tokens.slice(i + 4),
89
+ includeSpaceDelimiter ? ' ' : '',
90
+ ...(includeBaseSelector ? tokens.slice(0, i - 1) : []),
91
+ includeSpaceDelimiter ? '' : ' ',
92
+ ].join('');
93
+ break;
94
+ }
95
+ //
96
+ // Match for ":global(selector)"
97
+ selector = [
98
+ tokens[i + 2].slice(1, -1),
99
+ includeSpaceDelimiter ? ' ' : '',
100
+ ...(includeBaseSelector ? tokens.slice(0, i - 1) : []),
101
+ includeSpaceDelimiter ? '' : ' ',
102
+ ].join('');
103
+ break;
104
+ }
105
+ }
106
+ return selector;
107
+ }),
108
+ });
109
+ break;
110
+ default:
111
+ }
112
+ };
113
+ exports.stylisGlobalPlugin = stylisGlobalPlugin;
114
+ function createStylisUrlReplacePlugin(filename, outputFilename) {
115
+ return (element) => {
116
+ if (element.type === 'decl' && outputFilename) {
117
+ // When writing to a file, we need to adjust the relative paths inside url(..) expressions.
118
+ // It'll allow css-loader to resolve an imported asset properly.
119
+ // eslint-disable-next-line no-param-reassign
120
+ element.return = element.value.replace(/\b(url\((["']?))(\.[^)]+?)(\2\))/g, (match, p1, p2, p3, p4) => p1 + transformUrl(p3, outputFilename, filename) + p4);
121
+ }
122
+ };
123
+ }
124
+ exports.createStylisUrlReplacePlugin = createStylisUrlReplacePlugin;
125
+ function createStylisPreprocessor(options) {
126
+ function stylisPreprocess(selector, text) {
127
+ const compiled = (0, stylis_1.compile)(`${selector} {${text}}\n`);
128
+ return (0, stylis_1.serialize)(compiled, (0, stylis_1.middleware)([
129
+ createStylisUrlReplacePlugin(options.filename, options.outputFilename),
130
+ exports.stylisGlobalPlugin,
131
+ stylis_1.prefixer,
132
+ stylis_1.stringify,
133
+ ]));
134
+ }
135
+ return stylisPreprocess;
136
+ }
137
+ exports.createStylisPreprocessor = createStylisPreprocessor;
@@ -1,7 +1,4 @@
1
- /// <reference types="node" />
2
- import path from 'path';
3
1
  import type { IExtractAction, SyncScenarioForAction } from '../types';
4
- export declare function transformUrl(url: string, outputFilename: string, sourceFilename: string, platformPath?: typeof path): string;
5
2
  /**
6
3
  * Extract artifacts (e.g. CSS) from processors
7
4
  */
@@ -1,43 +1,8 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.extract = exports.transformUrl = void 0;
7
- const path_1 = __importDefault(require("path"));
3
+ exports.extract = void 0;
8
4
  const source_map_1 = require("source-map");
9
- const stylis_1 = require("stylis");
10
- const posixSep = path_1.default.posix.sep;
11
- function transformUrl(url, outputFilename, sourceFilename, platformPath = path_1.default) {
12
- // Replace asset path with new path relative to the output CSS
13
- const relative = platformPath.relative(platformPath.dirname(outputFilename),
14
- // Get the absolute path to the asset from the path relative to the JS file
15
- platformPath.resolve(platformPath.dirname(sourceFilename), url));
16
- if (platformPath.sep === posixSep) {
17
- return relative;
18
- }
19
- return relative.split(platformPath.sep).join(posixSep);
20
- }
21
- exports.transformUrl = transformUrl;
22
- function createStylisPreprocessor(options) {
23
- function stylisPreprocess(selector, text) {
24
- return (0, stylis_1.serialize)((0, stylis_1.compile)(`${selector} {${text}}\n`), (0, stylis_1.middleware)([
25
- (element) => {
26
- const { outputFilename } = options;
27
- if (element.type === 'decl' && outputFilename) {
28
- // When writing to a file, we need to adjust the relative paths inside url(..) expressions.
29
- // It'll allow css-loader to resolve an imported asset properly.
30
- // eslint-disable-next-line no-param-reassign
31
- element.return = element.value.replace(/\b(url\((["']?))(\.[^)]+?)(\2\))/g, (match, p1, p2, p3, p4) => p1 + transformUrl(p3, outputFilename, options.filename) + p4);
32
- }
33
- },
34
- stylis_1.namespace,
35
- stylis_1.prefixer,
36
- stylis_1.stringify,
37
- ]));
38
- }
39
- return stylisPreprocess;
40
- }
5
+ const createStylisPreprocessor_1 = require("./createStylisPreprocessor");
41
6
  function extractCssFromAst(rules, originalCode, options) {
42
7
  const mappings = [];
43
8
  let cssText = '';
@@ -53,7 +18,7 @@ function extractCssFromAst(rules, originalCode, options) {
53
18
  break;
54
19
  case 'stylis':
55
20
  default:
56
- preprocessor = createStylisPreprocessor(options);
21
+ preprocessor = (0, createStylisPreprocessor_1.createStylisPreprocessor)(options);
57
22
  }
58
23
  }
59
24
  Object.keys(rules).forEach((selector, index) => {
@@ -48,6 +48,7 @@ const prepareCode = (services, item, originalAst) => {
48
48
  }
49
49
  log('[preeval] metadata %O', transformMetadata);
50
50
  log('[evaluator:start] using %s', evaluator.name);
51
+ log.extend('source')('%s', preevalStageResult.code);
51
52
  const evaluatorConfig = {
52
53
  onlyExports: only,
53
54
  highPriorityPlugins: pluginOptions.highPriorityPlugins,
@@ -1,11 +1,8 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
3
  exports.loadWywOptions = void 0;
7
4
  const cosmiconfig_1 = require("cosmiconfig");
8
- const shaker_1 = __importDefault(require("../../shaker"));
5
+ const shaker_1 = require("../../shaker");
9
6
  const searchPlaces = [
10
7
  `.wyw-in-jsrc`,
11
8
  `.wyw-in-jsrc.json`,
@@ -51,7 +48,7 @@ function loadWywOptions(overrides = defaultOverrides) {
51
48
  extensions: ['.cjs', '.cts', '.js', '.jsx', '.mjs', '.mts', '.ts', '.tsx'],
52
49
  rules: rules ?? [
53
50
  {
54
- action: shaker_1.default,
51
+ action: shaker_1.shaker,
55
52
  },
56
53
  {
57
54
  // The old `ignore` option is used as a default value for `ignore` rule.
@@ -67,7 +64,7 @@ function loadWywOptions(overrides = defaultOverrides) {
67
64
  // If a file contains `export` or `import` keywords, we assume it's an ES-module
68
65
  return /(?:^|\*\/|;|})\s*(?:export|import)[\s{]/m.test(code);
69
66
  },
70
- action: shaker_1.default,
67
+ action: shaker_1.shaker,
71
68
  },
72
69
  ],
73
70
  babelOptions,