@wyw-in-js/transform 1.0.7 → 1.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm/cache.js +60 -5
- package/esm/cache.js.map +1 -1
- package/esm/module.js +8 -3
- package/esm/module.js.map +1 -1
- package/esm/transform/Entrypoint.js +8 -3
- package/esm/transform/Entrypoint.js.map +1 -1
- package/esm/transform/actions/BaseAction.js +2 -1
- package/esm/transform/actions/BaseAction.js.map +1 -1
- package/esm/transform/actions/actionRunner.js +2 -2
- package/esm/transform/actions/actionRunner.js.map +1 -1
- package/esm/transform/generators/processEntrypoint.js +5 -1
- package/esm/transform/generators/processEntrypoint.js.map +1 -1
- package/esm/transform/types.js.map +1 -1
- package/esm/transform.js +45 -23
- package/esm/transform.js.map +1 -1
- package/esm/utils/collectTemplateDependencies.js +9 -0
- package/esm/utils/collectTemplateDependencies.js.map +1 -1
- package/lib/cache.js +60 -5
- package/lib/cache.js.map +1 -1
- package/lib/module.js +10 -5
- package/lib/module.js.map +1 -1
- package/lib/transform/Entrypoint.js +8 -3
- package/lib/transform/Entrypoint.js.map +1 -1
- package/lib/transform/actions/BaseAction.js +2 -1
- package/lib/transform/actions/BaseAction.js.map +1 -1
- package/lib/transform/actions/actionRunner.js +2 -2
- package/lib/transform/actions/actionRunner.js.map +1 -1
- package/lib/transform/generators/processEntrypoint.js +5 -1
- package/lib/transform/generators/processEntrypoint.js.map +1 -1
- package/lib/transform/types.js.map +1 -1
- package/lib/transform.js +45 -23
- package/lib/transform.js.map +1 -1
- package/lib/utils/collectTemplateDependencies.js +9 -0
- package/lib/utils/collectTemplateDependencies.js.map +1 -1
- package/package.json +1 -1
- package/types/cache.d.ts +7 -0
- package/types/cache.js +59 -3
- package/types/module.js +8 -3
- package/types/transform/Entrypoint.d.ts +1 -1
- package/types/transform/Entrypoint.js +8 -3
- package/types/transform/actions/BaseAction.d.ts +2 -1
- package/types/transform/actions/BaseAction.js +3 -1
- package/types/transform/actions/actionRunner.js +2 -2
- package/types/transform/generators/processEntrypoint.js +4 -1
- package/types/transform/types.d.ts +1 -0
- package/types/transform.js +47 -23
- package/types/utils/collectTemplateDependencies.js +9 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collectTemplateDependencies.js","names":["statement","cloneNode","hasEvalMeta","ValueType","logger","createId","findIdentifiers","getSource","mutate","referenceAll","valueToLiteral","staticEval","ex","evaluate","undefined","result","confident","value","expressionDeclarationTpl","preserveComments","unsupported","reason","buildCodeFrameError","isIdentifier","getUidInRootScope","path","name","node","rootScope","scope","getProgramParent","hasBinding","generateUid","hoistVariableDeclarator","parent","referencedIdentifiers","forEach","identifier","hoistIdentifier","bindingIdentifiers","newName","rename","statementInRoot","findParent","p","parentPath","isProgram","declaration","type","kind","declarations","inserted","insertBefore","registerDeclaration","idPath","isReferenced","binding","getBinding","includes","bindingPath","isVariableDeclarator","extractExpression","imports","isLiteral","CONST","loc","isFunction","isFunctionExpression","isArrowFunctionExpression","expUid","evaluated","id","evaluatedId","replaceWith","FUNCTION","LAZY","expId","expression","importedFrom","findImportSourceOfIdentifier","exBindingIdentifier","exImport","find","i","local","push","source","traverse","Identifier","callee","arguments","debug","extend","collectTemplateDependencies","quasi","get","quasis","expressions","length","expressionValues","map","bind","isExpression","extracted"],"sources":["../../src/utils/collectTemplateDependencies.ts"],"sourcesContent":["/* eslint @typescript-eslint/no-use-before-define: [\"error\", { \"functions\": false }] */\n\n/**\n * This file is a visitor that checks TaggedTemplateExpressions and look for WYW template literals.\n * For each template it makes a list of dependencies, try to evaluate expressions, and if it is not possible, mark them as lazy dependencies.\n */\n\nimport { statement } from '@babel/template';\nimport type { NodePath } from '@babel/traverse';\nimport type {\n Expression,\n Identifier,\n JSXIdentifier,\n Statement,\n TaggedTemplateExpression,\n TemplateElement,\n TSType,\n VariableDeclaration,\n VariableDeclarator,\n} from '@babel/types';\nimport { cloneNode } from '@babel/types';\n\nimport type {\n ConstValue,\n ExpressionValue,\n FunctionValue,\n LazyValue,\n} from '@wyw-in-js/shared';\nimport { hasEvalMeta, ValueType, logger } from '@wyw-in-js/shared';\n\nimport type { IImport } from './collectExportsAndImports';\nimport { createId } from './createId';\nimport { findIdentifiers } from './findIdentifiers';\nimport { getSource } from './getSource';\nimport { mutate, referenceAll } from './scopeHelpers';\nimport { valueToLiteral } from './valueToLiteral';\n\nfunction staticEval(\n ex: NodePath<Expression>,\n evaluate = false\n): [unknown] | undefined {\n if (!evaluate) return undefined;\n\n const result = ex.evaluate();\n if (result.confident && !hasEvalMeta(result.value)) {\n return [result.value];\n }\n\n return undefined;\n}\n\nconst expressionDeclarationTpl = statement(\n 'const %%expId%% = () => %%expression%%',\n {\n preserveComments: true,\n }\n);\n\nconst unsupported = (ex: NodePath, reason?: string): Error =>\n ex.buildCodeFrameError(\n `This ${\n ex.isIdentifier() ? 'identifier' : 'expression'\n } cannot be used in the template${reason ? `, because it ${reason}` : ''}.`\n );\n\nfunction getUidInRootScope(path: NodePath<Identifier | JSXIdentifier>): string {\n const { name } = path.node;\n const rootScope = path.scope.getProgramParent();\n if (rootScope.hasBinding(name)) {\n return rootScope.generateUid(name);\n }\n\n return name;\n}\n\nfunction hoistVariableDeclarator(ex: NodePath<VariableDeclarator>) {\n if (!ex.scope.parent) {\n // It is already in the root scope\n return;\n }\n\n const referencedIdentifiers = findIdentifiers([ex], 'reference');\n referencedIdentifiers.forEach((identifier) => {\n if (identifier.isIdentifier()) {\n hoistIdentifier(identifier);\n }\n });\n\n const bindingIdentifiers = findIdentifiers([ex], 'declaration');\n\n bindingIdentifiers.forEach((path) => {\n const newName = getUidInRootScope(path);\n if (newName !== path.node.name) {\n path.scope.rename(path.node.name, newName);\n }\n });\n\n const rootScope = ex.scope.getProgramParent();\n\n const statementInRoot = ex.findParent(\n (p) => p.parentPath?.isProgram() === true\n ) as NodePath<Statement>;\n\n const declaration: VariableDeclaration = {\n type: 'VariableDeclaration',\n kind: 'let',\n declarations: [cloneNode(ex.node)],\n };\n\n const [inserted] = statementInRoot.insertBefore(declaration);\n referenceAll(inserted);\n rootScope.registerDeclaration(inserted);\n}\n\nfunction hoistIdentifier(idPath: NodePath<Identifier>): void {\n if (!idPath.isReferenced()) {\n throw unsupported(idPath);\n }\n\n const binding = idPath.scope.getBinding(idPath.node.name);\n if (!binding) {\n // It's something strange\n throw unsupported(idPath, 'is undefined');\n }\n\n if (binding.kind === 'module') {\n // Modules are global by default\n return;\n }\n\n if (!['var', 'let', 'const', 'hoisted'].includes(binding.kind)) {\n // This is not a variable, we can't hoist it\n throw unsupported(binding.path, 'is a function parameter');\n }\n\n const { scope, path: bindingPath } = binding;\n // parent here can be null or undefined in different versions of babel\n if (!scope.parent) {\n // The variable is already in the root scope\n return;\n }\n\n if (bindingPath.isVariableDeclarator()) {\n hoistVariableDeclarator(bindingPath);\n\n return;\n }\n\n throw unsupported(idPath);\n}\n\n/**\n * Only an expression that can be evaluated in the root scope can be\n * used in a WYW template. This function tries to hoist the expression.\n * @param ex The expression to hoist.\n * @param evaluate If true, we try to statically evaluate the expression.\n * @param imports All the imports of the file.\n */\nexport function extractExpression(\n ex: NodePath<Expression>,\n evaluate = false,\n imports: IImport[] = []\n): Omit<ExpressionValue, 'buildCodeFrameError' | 'source'> {\n if (\n ex.isLiteral() &&\n ('value' in ex.node || ex.node.type === 'NullLiteral')\n ) {\n return {\n ex: ex.node,\n kind: ValueType.CONST,\n value: ex.node.type === 'NullLiteral' ? null : ex.node.value,\n } as Omit<ConstValue, 'buildCodeFrameError' | 'source'>;\n }\n\n const { loc } = ex.node;\n\n const rootScope = ex.scope.getProgramParent();\n const statementInRoot = ex.findParent(\n (p) => p.parentPath?.isProgram() === true\n ) as NodePath<Statement>;\n\n const isFunction =\n ex.isFunctionExpression() || ex.isArrowFunctionExpression();\n\n // Generate next _expN name\n const expUid = rootScope.generateUid('exp');\n\n const evaluated = staticEval(ex, evaluate);\n\n if (!evaluated) {\n // If expression is not statically evaluable,\n // we need to hoist all its referenced identifiers\n\n // Collect all referenced identifiers\n findIdentifiers([ex], 'reference').forEach((id) => {\n if (!id.isIdentifier()) return;\n\n // Try to evaluate and inline them…\n const evaluatedId = staticEval(id, evaluate);\n if (evaluatedId) {\n mutate(id, (p) => {\n p.replaceWith(valueToLiteral(evaluatedId[0], ex));\n });\n } else {\n // … or hoist them to the root scope\n hoistIdentifier(id);\n }\n });\n }\n\n const kind = isFunction ? ValueType.FUNCTION : ValueType.LAZY;\n\n // Declare _expN const with the lazy expression\n const declaration = expressionDeclarationTpl({\n expId: createId(expUid),\n expression: evaluated\n ? valueToLiteral(evaluated[0], ex)\n : cloneNode(ex.node),\n }) as VariableDeclaration;\n\n // Insert the declaration as close as possible to the original expression\n const [inserted] = statementInRoot.insertBefore(declaration);\n referenceAll(inserted);\n rootScope.registerDeclaration(inserted);\n\n const importedFrom: string[] = [];\n function findImportSourceOfIdentifier(idPath: NodePath<Identifier>) {\n const exBindingIdentifier = idPath.scope.getBinding(idPath.node.name)\n ?.identifier;\n const exImport =\n imports.find((i) => i.local.node === exBindingIdentifier) ?? null;\n if (exImport) {\n importedFrom.push(exImport.source);\n }\n }\n\n if (ex.isIdentifier()) {\n findImportSourceOfIdentifier(ex);\n } else {\n ex.traverse({\n Identifier: findImportSourceOfIdentifier,\n });\n }\n\n // Replace the expression with the _expN() call\n mutate(ex, (p) => {\n p.replaceWith({\n type: 'CallExpression',\n callee: createId(expUid),\n arguments: [],\n });\n });\n\n // eslint-disable-next-line no-param-reassign\n ex.node.loc = loc;\n\n // noinspection UnnecessaryLocalVariableJS\n const result: Omit<\n LazyValue | FunctionValue,\n 'buildCodeFrameError' | 'source'\n > = {\n kind,\n ex: createId(expUid, loc),\n importedFrom,\n };\n\n return result;\n}\n\nconst debug = logger.extend('template-parse:identify-expressions');\n\n/**\n * Collects, hoists, and makes lazy all expressions in the given template\n * If evaluate is true, it will try to evaluate the expressions\n */\nexport function collectTemplateDependencies(\n path: NodePath<TaggedTemplateExpression>,\n evaluate = false\n): [quasis: TemplateElement[], expressionValues: ExpressionValue[]] {\n const quasi = path.get('quasi');\n const quasis = quasi.get('quasis');\n const expressions = quasi.get('expressions');\n\n debug('Found: %s', expressions.length);\n\n const expressionValues: ExpressionValue[] = expressions.map(\n (ex: NodePath<Expression | TSType>): ExpressionValue => {\n const buildCodeFrameError = ex.buildCodeFrameError.bind(ex);\n const source = getSource(ex);\n\n if (!ex.isExpression()) {\n throw buildCodeFrameError(\n `The expression '${source}' is not supported.`\n );\n }\n\n const extracted = extractExpression(ex, evaluate);\n\n return {\n ...extracted,\n source,\n buildCodeFrameError,\n } as ExpressionValue;\n }\n );\n\n return [quasis.map((p) => p.node), expressionValues];\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"collectTemplateDependencies.js","names":["statement","cloneNode","hasEvalMeta","ValueType","logger","createId","findIdentifiers","getSource","mutate","referenceAll","valueToLiteral","staticEval","ex","evaluate","undefined","isIdentifier","binding","scope","getBinding","node","name","path","isVariableDeclarator","get","result","confident","value","expressionDeclarationTpl","preserveComments","unsupported","reason","buildCodeFrameError","getUidInRootScope","rootScope","getProgramParent","hasBinding","generateUid","hoistVariableDeclarator","parent","referencedIdentifiers","forEach","identifier","hoistIdentifier","bindingIdentifiers","newName","rename","statementInRoot","findParent","p","parentPath","isProgram","declaration","type","kind","declarations","inserted","insertBefore","registerDeclaration","idPath","isReferenced","includes","bindingPath","extractExpression","imports","isLiteral","CONST","loc","isFunction","isFunctionExpression","isArrowFunctionExpression","expUid","evaluated","id","evaluatedId","replaceWith","FUNCTION","LAZY","expId","expression","importedFrom","findImportSourceOfIdentifier","exBindingIdentifier","exImport","find","i","local","push","source","traverse","Identifier","callee","arguments","debug","extend","collectTemplateDependencies","quasi","quasis","expressions","length","expressionValues","map","bind","isExpression","extracted"],"sources":["../../src/utils/collectTemplateDependencies.ts"],"sourcesContent":["/* eslint @typescript-eslint/no-use-before-define: [\"error\", { \"functions\": false }] */\n\n/**\n * This file is a visitor that checks TaggedTemplateExpressions and look for WYW template literals.\n * For each template it makes a list of dependencies, try to evaluate expressions, and if it is not possible, mark them as lazy dependencies.\n */\n\nimport { statement } from '@babel/template';\nimport type { NodePath } from '@babel/traverse';\nimport type {\n Expression,\n Identifier,\n JSXIdentifier,\n Statement,\n TaggedTemplateExpression,\n TemplateElement,\n TSType,\n VariableDeclaration,\n VariableDeclarator,\n} from '@babel/types';\nimport { cloneNode } from '@babel/types';\n\nimport type {\n ConstValue,\n ExpressionValue,\n FunctionValue,\n LazyValue,\n} from '@wyw-in-js/shared';\nimport { hasEvalMeta, ValueType, logger } from '@wyw-in-js/shared';\n\nimport type { IImport } from './collectExportsAndImports';\nimport { createId } from './createId';\nimport { findIdentifiers } from './findIdentifiers';\nimport { getSource } from './getSource';\nimport { mutate, referenceAll } from './scopeHelpers';\nimport { valueToLiteral } from './valueToLiteral';\n\nfunction staticEval(\n ex: NodePath<Expression>,\n evaluate = false\n): [unknown] | undefined {\n if (!evaluate) return undefined;\n\n if (ex.isIdentifier()) {\n const binding = ex.scope.getBinding(ex.node.name);\n\n // Babel may \"evaluate\" a destructured binding to its source container\n // object/array instead of the bound value, which changes template semantics.\n if (\n binding?.path.isVariableDeclarator() &&\n !binding.path.get('id').isIdentifier()\n ) {\n return undefined;\n }\n }\n\n const result = ex.evaluate();\n if (result.confident && !hasEvalMeta(result.value)) {\n return [result.value];\n }\n\n return undefined;\n}\n\nconst expressionDeclarationTpl = statement(\n 'const %%expId%% = () => %%expression%%',\n {\n preserveComments: true,\n }\n);\n\nconst unsupported = (ex: NodePath, reason?: string): Error =>\n ex.buildCodeFrameError(\n `This ${\n ex.isIdentifier() ? 'identifier' : 'expression'\n } cannot be used in the template${reason ? `, because it ${reason}` : ''}.`\n );\n\nfunction getUidInRootScope(path: NodePath<Identifier | JSXIdentifier>): string {\n const { name } = path.node;\n const rootScope = path.scope.getProgramParent();\n if (rootScope.hasBinding(name)) {\n return rootScope.generateUid(name);\n }\n\n return name;\n}\n\nfunction hoistVariableDeclarator(ex: NodePath<VariableDeclarator>) {\n if (!ex.scope.parent) {\n // It is already in the root scope\n return;\n }\n\n const referencedIdentifiers = findIdentifiers([ex], 'reference');\n referencedIdentifiers.forEach((identifier) => {\n if (identifier.isIdentifier()) {\n hoistIdentifier(identifier);\n }\n });\n\n const bindingIdentifiers = findIdentifiers([ex], 'declaration');\n\n bindingIdentifiers.forEach((path) => {\n const newName = getUidInRootScope(path);\n if (newName !== path.node.name) {\n path.scope.rename(path.node.name, newName);\n }\n });\n\n const rootScope = ex.scope.getProgramParent();\n\n const statementInRoot = ex.findParent(\n (p) => p.parentPath?.isProgram() === true\n ) as NodePath<Statement>;\n\n const declaration: VariableDeclaration = {\n type: 'VariableDeclaration',\n kind: 'let',\n declarations: [cloneNode(ex.node)],\n };\n\n const [inserted] = statementInRoot.insertBefore(declaration);\n referenceAll(inserted);\n rootScope.registerDeclaration(inserted);\n}\n\nfunction hoistIdentifier(idPath: NodePath<Identifier>): void {\n if (!idPath.isReferenced()) {\n throw unsupported(idPath);\n }\n\n const binding = idPath.scope.getBinding(idPath.node.name);\n if (!binding) {\n // It's something strange\n throw unsupported(idPath, 'is undefined');\n }\n\n if (binding.kind === 'module') {\n // Modules are global by default\n return;\n }\n\n if (!['var', 'let', 'const', 'hoisted'].includes(binding.kind)) {\n // This is not a variable, we can't hoist it\n throw unsupported(binding.path, 'is a function parameter');\n }\n\n const { scope, path: bindingPath } = binding;\n // parent here can be null or undefined in different versions of babel\n if (!scope.parent) {\n // The variable is already in the root scope\n return;\n }\n\n if (bindingPath.isVariableDeclarator()) {\n hoistVariableDeclarator(bindingPath);\n\n return;\n }\n\n throw unsupported(idPath);\n}\n\n/**\n * Only an expression that can be evaluated in the root scope can be\n * used in a WYW template. This function tries to hoist the expression.\n * @param ex The expression to hoist.\n * @param evaluate If true, we try to statically evaluate the expression.\n * @param imports All the imports of the file.\n */\nexport function extractExpression(\n ex: NodePath<Expression>,\n evaluate = false,\n imports: IImport[] = []\n): Omit<ExpressionValue, 'buildCodeFrameError' | 'source'> {\n if (\n ex.isLiteral() &&\n ('value' in ex.node || ex.node.type === 'NullLiteral')\n ) {\n return {\n ex: ex.node,\n kind: ValueType.CONST,\n value: ex.node.type === 'NullLiteral' ? null : ex.node.value,\n } as Omit<ConstValue, 'buildCodeFrameError' | 'source'>;\n }\n\n const { loc } = ex.node;\n\n const rootScope = ex.scope.getProgramParent();\n const statementInRoot = ex.findParent(\n (p) => p.parentPath?.isProgram() === true\n ) as NodePath<Statement>;\n\n const isFunction =\n ex.isFunctionExpression() || ex.isArrowFunctionExpression();\n\n // Generate next _expN name\n const expUid = rootScope.generateUid('exp');\n\n const evaluated = staticEval(ex, evaluate);\n\n if (!evaluated) {\n // If expression is not statically evaluable,\n // we need to hoist all its referenced identifiers\n\n // Collect all referenced identifiers\n findIdentifiers([ex], 'reference').forEach((id) => {\n if (!id.isIdentifier()) return;\n\n // Try to evaluate and inline them…\n const evaluatedId = staticEval(id, evaluate);\n if (evaluatedId) {\n mutate(id, (p) => {\n p.replaceWith(valueToLiteral(evaluatedId[0], ex));\n });\n } else {\n // … or hoist them to the root scope\n hoistIdentifier(id);\n }\n });\n }\n\n const kind = isFunction ? ValueType.FUNCTION : ValueType.LAZY;\n\n // Declare _expN const with the lazy expression\n const declaration = expressionDeclarationTpl({\n expId: createId(expUid),\n expression: evaluated\n ? valueToLiteral(evaluated[0], ex)\n : cloneNode(ex.node),\n }) as VariableDeclaration;\n\n // Insert the declaration as close as possible to the original expression\n const [inserted] = statementInRoot.insertBefore(declaration);\n referenceAll(inserted);\n rootScope.registerDeclaration(inserted);\n\n const importedFrom: string[] = [];\n function findImportSourceOfIdentifier(idPath: NodePath<Identifier>) {\n const exBindingIdentifier = idPath.scope.getBinding(idPath.node.name)\n ?.identifier;\n const exImport =\n imports.find((i) => i.local.node === exBindingIdentifier) ?? null;\n if (exImport) {\n importedFrom.push(exImport.source);\n }\n }\n\n if (ex.isIdentifier()) {\n findImportSourceOfIdentifier(ex);\n } else {\n ex.traverse({\n Identifier: findImportSourceOfIdentifier,\n });\n }\n\n // Replace the expression with the _expN() call\n mutate(ex, (p) => {\n p.replaceWith({\n type: 'CallExpression',\n callee: createId(expUid),\n arguments: [],\n });\n });\n\n // eslint-disable-next-line no-param-reassign\n ex.node.loc = loc;\n\n // noinspection UnnecessaryLocalVariableJS\n const result: Omit<\n LazyValue | FunctionValue,\n 'buildCodeFrameError' | 'source'\n > = {\n kind,\n ex: createId(expUid, loc),\n importedFrom,\n };\n\n return result;\n}\n\nconst debug = logger.extend('template-parse:identify-expressions');\n\n/**\n * Collects, hoists, and makes lazy all expressions in the given template\n * If evaluate is true, it will try to evaluate the expressions\n */\nexport function collectTemplateDependencies(\n path: NodePath<TaggedTemplateExpression>,\n evaluate = false\n): [quasis: TemplateElement[], expressionValues: ExpressionValue[]] {\n const quasi = path.get('quasi');\n const quasis = quasi.get('quasis');\n const expressions = quasi.get('expressions');\n\n debug('Found: %s', expressions.length);\n\n const expressionValues: ExpressionValue[] = expressions.map(\n (ex: NodePath<Expression | TSType>): ExpressionValue => {\n const buildCodeFrameError = ex.buildCodeFrameError.bind(ex);\n const source = getSource(ex);\n\n if (!ex.isExpression()) {\n throw buildCodeFrameError(\n `The expression '${source}' is not supported.`\n );\n }\n\n const extracted = extractExpression(ex, evaluate);\n\n return {\n ...extracted,\n source,\n buildCodeFrameError,\n } as ExpressionValue;\n }\n );\n\n return [quasis.map((p) => p.node), expressionValues];\n}\n"],"mappings":"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","ignoreList":[]}
|
package/lib/cache.js
CHANGED
|
@@ -13,6 +13,15 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e
|
|
|
13
13
|
function hashContent(content) {
|
|
14
14
|
return (0, _crypto.createHash)('sha256').update(content).digest('hex');
|
|
15
15
|
}
|
|
16
|
+
function isMissingFileError(error) {
|
|
17
|
+
if (!error || typeof error !== 'object') {
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
const {
|
|
21
|
+
code
|
|
22
|
+
} = error;
|
|
23
|
+
return code === 'ENOENT' || code === 'ENOTDIR';
|
|
24
|
+
}
|
|
16
25
|
const cacheLogger = _shared.logger.extend('cache');
|
|
17
26
|
const cacheNames = ['barrelManifests', 'entrypoints', 'exports'];
|
|
18
27
|
const loggers = cacheNames.reduce((acc, key) => ({
|
|
@@ -22,6 +31,7 @@ const loggers = cacheNames.reduce((acc, key) => ({
|
|
|
22
31
|
class TransformCacheCollection {
|
|
23
32
|
barrelManifestDependencies = new Map();
|
|
24
33
|
contentHashes = new Map();
|
|
34
|
+
fileMtimes = new Map();
|
|
25
35
|
exportDependencies = new Map();
|
|
26
36
|
constructor(caches = {}) {
|
|
27
37
|
this.barrelManifests = caches.barrelManifests || new Map();
|
|
@@ -153,7 +163,18 @@ class TransformCacheCollection {
|
|
|
153
163
|
for (const [, dependency] of dependenciesToCheck) {
|
|
154
164
|
const dependencyFilename = dependency.resolved;
|
|
155
165
|
if (dependencyFilename) {
|
|
156
|
-
|
|
166
|
+
let dependencyContent;
|
|
167
|
+
try {
|
|
168
|
+
dependencyContent = _nodeFs.default.readFileSync((0, _parseRequest.stripQueryAndHash)(dependencyFilename), 'utf8');
|
|
169
|
+
} catch (error) {
|
|
170
|
+
if (!isMissingFileError(error)) {
|
|
171
|
+
throw error;
|
|
172
|
+
}
|
|
173
|
+
this.invalidateForFile(dependencyFilename);
|
|
174
|
+
anyDepChanged = true;
|
|
175
|
+
// eslint-disable-next-line no-continue
|
|
176
|
+
continue;
|
|
177
|
+
}
|
|
157
178
|
const dependencyChanged = this.invalidateIfChanged(dependencyFilename, dependencyContent, visitedFiles, 'fs', changedFiles);
|
|
158
179
|
if (dependencyChanged && invalidateOnDependencyChange !== null && invalidateOnDependencyChange !== void 0 && invalidateOnDependencyChange.has(dependencyFilename)) {
|
|
159
180
|
cacheLogger('dependency affecting output has changed, invalidate all for %s', filename);
|
|
@@ -238,15 +259,49 @@ class TransformCacheCollection {
|
|
|
238
259
|
hasCachedDependencies(filename) {
|
|
239
260
|
return this.getCachedDependencies(filename).size > 0;
|
|
240
261
|
}
|
|
262
|
+
|
|
263
|
+
/**
|
|
264
|
+
* Fast check if a file changed on disk since last seen.
|
|
265
|
+
* Uses mtime as a fast path — only reads the file if mtime differs.
|
|
266
|
+
* Returns true if the file changed (cache was invalidated).
|
|
267
|
+
*/
|
|
268
|
+
checkFreshness(filename, strippedFilename) {
|
|
269
|
+
try {
|
|
270
|
+
const currentMtime = _nodeFs.default.statSync(strippedFilename).mtimeMs;
|
|
271
|
+
const cachedMtime = this.fileMtimes.get(filename);
|
|
272
|
+
if (cachedMtime !== undefined && currentMtime === cachedMtime) {
|
|
273
|
+
return false;
|
|
274
|
+
}
|
|
275
|
+
const content = _nodeFs.default.readFileSync(strippedFilename, 'utf-8');
|
|
276
|
+
this.fileMtimes.set(filename, currentMtime);
|
|
277
|
+
if (this.invalidateIfChanged(filename, content, undefined, 'fs')) {
|
|
278
|
+
return true;
|
|
279
|
+
}
|
|
280
|
+
return false;
|
|
281
|
+
} catch (error) {
|
|
282
|
+
if (!isMissingFileError(error)) {
|
|
283
|
+
throw error;
|
|
284
|
+
}
|
|
285
|
+
this.invalidateForFile(filename);
|
|
286
|
+
return true;
|
|
287
|
+
}
|
|
288
|
+
}
|
|
241
289
|
setContentHash(filename, source, hash) {
|
|
242
290
|
const current = this.contentHashes.get(filename);
|
|
243
291
|
if (current) {
|
|
244
292
|
current[source] = hash;
|
|
245
|
-
|
|
293
|
+
} else {
|
|
294
|
+
this.contentHashes.set(filename, {
|
|
295
|
+
[source]: hash
|
|
296
|
+
});
|
|
297
|
+
}
|
|
298
|
+
if (source === 'fs') {
|
|
299
|
+
try {
|
|
300
|
+
this.fileMtimes.set(filename, _nodeFs.default.statSync((0, _parseRequest.stripQueryAndHash)(filename)).mtimeMs);
|
|
301
|
+
} catch {
|
|
302
|
+
// ignore
|
|
303
|
+
}
|
|
246
304
|
}
|
|
247
|
-
this.contentHashes.set(filename, {
|
|
248
|
-
[source]: hash
|
|
249
|
-
});
|
|
250
305
|
}
|
|
251
306
|
}
|
|
252
307
|
exports.TransformCacheCollection = TransformCacheCollection;
|
package/lib/cache.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.js","names":["_crypto","require","_nodeFs","_interopRequireDefault","_shared","_getFileIdx","_parseRequest","e","__esModule","default","hashContent","content","createHash","update","digest","cacheLogger","logger","extend","cacheNames","loggers","reduce","acc","key","TransformCacheCollection","barrelManifestDependencies","Map","contentHashes","exportDependencies","constructor","caches","barrelManifests","entrypoints","exports","add","cacheName","value","cache","getFileIdx","undefined","has","get","delete","clearCacheDependencies","set","maybeOriginalCode","originalCode","isLoaded","initialCode","source","resolvedCode","setContentHash","fileContent","fs","readFileSync","stripQueryAndHash","clear","forEach","name","invalidate","res","invalidateForFile","filename","invalidateIfChanged","previousVisitedFiles","changedFiles","Set","visitedFiles","fileEntrypoint","anyDepChanged","hasCachedDependencies","invalidateOnDependencyChange","dependenciesToCheck","dependency","_fileEntrypoint$depen","dependencies","_fileEntrypoint$inval","invalidationDependencies","dependencyFilename","getCachedDependencies","values","some","resolved","dependencyContent","dependencyChanged","existing","previousHash","newHash","otherSource","otherHash","setCacheDependencies","getDependencyCache","nextDependencies","filter","length","size","_this$barrelManifestD","_this$exportDependenc","hash","current"],"sources":["../src/cache.ts"],"sourcesContent":["import { createHash } from 'crypto';\nimport fs from 'node:fs';\nimport { logger } from '@wyw-in-js/shared';\n\nimport type { BarrelManifestCacheEntry } from './transform/barrelManifest';\nimport type { Entrypoint } from './transform/Entrypoint';\nimport type { IEvaluatedEntrypoint } from './transform/EvaluatedEntrypoint';\nimport { getFileIdx } from './utils/getFileIdx';\nimport { stripQueryAndHash } from './utils/parseRequest';\n\nfunction hashContent(content: string) {\n return createHash('sha256').update(content).digest('hex');\n}\n\ninterface IBaseCachedEntrypoint {\n dependencies: Map<string, { resolved: string | null }>;\n initialCode?: string;\n invalidateOnDependencyChange?: Set<string>;\n invalidationDependencies?: Map<string, { resolved: string | null }>;\n}\n\ninterface ICaches<TEntrypoint extends IBaseCachedEntrypoint> {\n barrelManifests: Map<string, BarrelManifestCacheEntry>;\n entrypoints: Map<string, TEntrypoint>;\n exports: Map<string, string[]>;\n}\n\ntype MapValue<T> = T extends Map<string, infer V> ? V : never;\n\nconst cacheLogger = logger.extend('cache');\n\nconst cacheNames = ['barrelManifests', 'entrypoints', 'exports'] as const;\ntype CacheNames = (typeof cacheNames)[number];\n\nconst loggers = cacheNames.reduce(\n (acc, key) => ({\n ...acc,\n [key]: cacheLogger.extend(key),\n }),\n {} as Record<CacheNames, typeof logger>\n);\n\nexport class TransformCacheCollection<\n TEntrypoint extends IBaseCachedEntrypoint = Entrypoint | IEvaluatedEntrypoint,\n> {\n public readonly barrelManifests: Map<string, BarrelManifestCacheEntry>;\n\n public readonly entrypoints: Map<string, TEntrypoint>;\n\n public readonly exports: Map<string, string[]>;\n\n private readonly barrelManifestDependencies = new Map<string, Set<string>>();\n\n private contentHashes = new Map<string, { fs?: string; loaded?: string }>();\n\n private readonly exportDependencies = new Map<string, Set<string>>();\n\n constructor(caches: Partial<ICaches<TEntrypoint>> = {}) {\n this.barrelManifests = caches.barrelManifests || new Map();\n this.entrypoints = caches.entrypoints || new Map();\n this.exports = caches.exports || new Map();\n }\n\n public add<\n TCache extends CacheNames,\n TValue extends MapValue<ICaches<TEntrypoint>[TCache]>,\n >(cacheName: TCache, key: string, value: TValue): void {\n const cache = this[cacheName] as Map<string, TValue>;\n loggers[cacheName]('%s:add %s %f', getFileIdx(key), key, () => {\n if (value === undefined) {\n return cache.has(key) ? 'removed' : 'noop';\n }\n\n if (!cache.has(key)) {\n return 'added';\n }\n\n return cache.get(key) === value ? 'unchanged' : 'updated';\n });\n\n if (value === undefined) {\n cache.delete(key);\n this.contentHashes.delete(key);\n this.clearCacheDependencies(cacheName, key);\n return;\n }\n\n this.clearCacheDependencies(cacheName, key);\n cache.set(key, value);\n\n if ('initialCode' in value) {\n const maybeOriginalCode = (value as unknown as { originalCode?: unknown })\n .originalCode;\n const isLoaded = typeof value.initialCode === 'string';\n const source = isLoaded ? 'loaded' : 'fs';\n\n let resolvedCode: string | undefined;\n if (isLoaded) {\n resolvedCode = value.initialCode;\n } else if (typeof maybeOriginalCode === 'string') {\n resolvedCode = maybeOriginalCode;\n }\n\n if (resolvedCode !== undefined) {\n this.setContentHash(key, source, hashContent(resolvedCode));\n return;\n }\n\n try {\n const fileContent = fs.readFileSync(stripQueryAndHash(key), 'utf8');\n this.setContentHash(key, source, hashContent(fileContent));\n } catch {\n this.setContentHash(key, source, hashContent(''));\n }\n\n return;\n }\n\n if (cacheName === 'barrelManifests') {\n try {\n const fileContent = fs.readFileSync(stripQueryAndHash(key), 'utf8');\n this.setContentHash(key, 'fs', hashContent(fileContent));\n } catch {\n this.setContentHash(key, 'fs', hashContent(''));\n }\n }\n }\n\n public clear(cacheName: CacheNames | 'all'): void {\n if (cacheName === 'all') {\n cacheNames.forEach((name) => {\n this.clear(name);\n });\n\n return;\n }\n\n loggers[cacheName]('clear');\n const cache = this[cacheName] as Map<string, unknown>;\n\n cache.clear();\n this.clearCacheDependencies(cacheName);\n }\n\n public delete(cacheName: CacheNames, key: string): void {\n this.invalidate(cacheName, key);\n }\n\n public get<\n TCache extends CacheNames,\n TValue extends MapValue<ICaches<TEntrypoint>[TCache]>,\n >(cacheName: TCache, key: string): TValue | undefined {\n const cache = this[cacheName] as Map<string, TValue>;\n\n const res = cache.get(key);\n loggers[cacheName]('get', key, res === undefined ? 'miss' : 'hit');\n return res;\n }\n\n public has(cacheName: CacheNames, key: string): boolean {\n const cache = this[cacheName] as Map<string, unknown>;\n\n const res = cache.has(key);\n loggers[cacheName]('has', key, res);\n return res;\n }\n\n public invalidate(cacheName: CacheNames, key: string): void {\n const cache = this[cacheName] as Map<string, unknown>;\n if (!cache.has(key)) {\n return;\n }\n\n loggers[cacheName]('invalidate', key);\n\n cache.delete(key);\n this.clearCacheDependencies(cacheName, key);\n }\n\n public invalidateForFile(filename: string) {\n cacheNames.forEach((cacheName) => {\n this.invalidate(cacheName, filename);\n });\n }\n\n public invalidateIfChanged(\n filename: string,\n content: string,\n previousVisitedFiles?: Set<string>,\n source: 'fs' | 'loaded' = 'loaded',\n changedFiles = new Set<string>()\n ) {\n if (changedFiles.has(filename)) {\n return true;\n }\n\n const visitedFiles = new Set(previousVisitedFiles);\n const fileEntrypoint = this.get('entrypoints', filename);\n let anyDepChanged = false;\n\n // We need to check all dependencies of the file\n // because they might have changed as well.\n if (\n !visitedFiles.has(filename) &&\n (fileEntrypoint || this.hasCachedDependencies(filename))\n ) {\n visitedFiles.add(filename);\n const invalidateOnDependencyChange =\n fileEntrypoint?.invalidateOnDependencyChange;\n\n const dependenciesToCheck = new Map<\n string,\n { resolved: string | null }\n >();\n\n for (const [key, dependency] of fileEntrypoint?.dependencies ?? []) {\n dependenciesToCheck.set(key, dependency);\n }\n\n for (const [\n key,\n dependency,\n ] of fileEntrypoint?.invalidationDependencies ?? []) {\n if (!dependenciesToCheck.has(key)) {\n dependenciesToCheck.set(key, dependency);\n }\n }\n\n for (const dependencyFilename of this.getCachedDependencies(filename)) {\n if (\n ![...dependenciesToCheck.values()].some(\n (dependency) => dependency.resolved === dependencyFilename\n )\n ) {\n dependenciesToCheck.set(dependencyFilename, {\n resolved: dependencyFilename,\n });\n }\n }\n\n for (const [, dependency] of dependenciesToCheck) {\n const dependencyFilename = dependency.resolved;\n\n if (dependencyFilename) {\n const dependencyContent = fs.readFileSync(\n stripQueryAndHash(dependencyFilename),\n 'utf8'\n );\n const dependencyChanged = this.invalidateIfChanged(\n dependencyFilename,\n dependencyContent,\n visitedFiles,\n 'fs',\n changedFiles\n );\n\n if (\n dependencyChanged &&\n invalidateOnDependencyChange?.has(dependencyFilename)\n ) {\n cacheLogger(\n 'dependency affecting output has changed, invalidate all for %s',\n filename\n );\n this.invalidateForFile(filename);\n changedFiles.add(filename);\n\n return true;\n }\n\n if (dependencyChanged) {\n anyDepChanged = true;\n }\n }\n }\n }\n\n const existing = this.contentHashes.get(filename);\n const previousHash = existing?.[source];\n const newHash = hashContent(content);\n\n if (previousHash === undefined) {\n const otherSource = source === 'fs' ? 'loaded' : 'fs';\n const otherHash = existing?.[otherSource];\n\n if ((otherHash !== undefined && otherHash !== newHash) || anyDepChanged) {\n cacheLogger('content has changed, invalidate all for %s', filename);\n this.setContentHash(filename, source, newHash);\n this.invalidateForFile(filename);\n changedFiles.add(filename);\n\n return true;\n }\n\n this.setContentHash(filename, source, newHash);\n if (anyDepChanged) {\n this.invalidateForFile(filename);\n changedFiles.add(filename);\n return true;\n }\n return false;\n }\n\n if (previousHash !== newHash || anyDepChanged) {\n cacheLogger('content has changed, invalidate all for %s', filename);\n this.setContentHash(filename, source, newHash);\n this.invalidateForFile(filename);\n changedFiles.add(filename);\n\n return true;\n }\n\n return false;\n }\n\n public setCacheDependencies(\n cacheName: 'barrelManifests' | 'exports',\n key: string,\n dependencies: Iterable<string>\n ): void {\n const cache = this.getDependencyCache(cacheName);\n const nextDependencies = new Set(\n [...dependencies].filter((dependency) => dependency.length > 0)\n );\n\n if (nextDependencies.size === 0) {\n cache.delete(key);\n return;\n }\n\n cache.set(key, nextDependencies);\n }\n\n private clearCacheDependencies(cacheName: CacheNames | 'all', key?: string) {\n if (cacheName === 'all') {\n this.barrelManifestDependencies.clear();\n this.exportDependencies.clear();\n return;\n }\n\n if (cacheName === 'barrelManifests') {\n if (key === undefined) {\n this.barrelManifestDependencies.clear();\n } else {\n this.barrelManifestDependencies.delete(key);\n }\n return;\n }\n\n if (cacheName === 'exports') {\n if (key === undefined) {\n this.exportDependencies.clear();\n } else {\n this.exportDependencies.delete(key);\n }\n }\n }\n\n private getCachedDependencies(filename: string): Set<string> {\n return new Set([\n ...(this.barrelManifestDependencies.get(filename) ?? []),\n ...(this.exportDependencies.get(filename) ?? []),\n ]);\n }\n\n private getDependencyCache(cacheName: 'barrelManifests' | 'exports') {\n return cacheName === 'barrelManifests'\n ? this.barrelManifestDependencies\n : this.exportDependencies;\n }\n\n private hasCachedDependencies(filename: string): boolean {\n return this.getCachedDependencies(filename).size > 0;\n }\n\n private setContentHash(\n filename: string,\n source: 'fs' | 'loaded',\n hash: string\n ) {\n const current = this.contentHashes.get(filename);\n if (current) {\n current[source] = hash;\n return;\n }\n\n this.contentHashes.set(filename, { [source]: hash });\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"cache.js","names":["_crypto","require","_nodeFs","_interopRequireDefault","_shared","_getFileIdx","_parseRequest","e","__esModule","default","hashContent","content","createHash","update","digest","isMissingFileError","error","code","cacheLogger","logger","extend","cacheNames","loggers","reduce","acc","key","TransformCacheCollection","barrelManifestDependencies","Map","contentHashes","fileMtimes","exportDependencies","constructor","caches","barrelManifests","entrypoints","exports","add","cacheName","value","cache","getFileIdx","undefined","has","get","delete","clearCacheDependencies","set","maybeOriginalCode","originalCode","isLoaded","initialCode","source","resolvedCode","setContentHash","fileContent","fs","readFileSync","stripQueryAndHash","clear","forEach","name","invalidate","res","invalidateForFile","filename","invalidateIfChanged","previousVisitedFiles","changedFiles","Set","visitedFiles","fileEntrypoint","anyDepChanged","hasCachedDependencies","invalidateOnDependencyChange","dependenciesToCheck","dependency","_fileEntrypoint$depen","dependencies","_fileEntrypoint$inval","invalidationDependencies","dependencyFilename","getCachedDependencies","values","some","resolved","dependencyContent","dependencyChanged","existing","previousHash","newHash","otherSource","otherHash","setCacheDependencies","getDependencyCache","nextDependencies","filter","length","size","_this$barrelManifestD","_this$exportDependenc","checkFreshness","strippedFilename","currentMtime","statSync","mtimeMs","cachedMtime","hash","current"],"sources":["../src/cache.ts"],"sourcesContent":["import { createHash } from 'crypto';\nimport fs from 'node:fs';\nimport { logger } from '@wyw-in-js/shared';\n\nimport type { BarrelManifestCacheEntry } from './transform/barrelManifest';\nimport type { Entrypoint } from './transform/Entrypoint';\nimport type { IEvaluatedEntrypoint } from './transform/EvaluatedEntrypoint';\nimport { getFileIdx } from './utils/getFileIdx';\nimport { stripQueryAndHash } from './utils/parseRequest';\n\nfunction hashContent(content: string) {\n return createHash('sha256').update(content).digest('hex');\n}\n\nfunction isMissingFileError(error: unknown): boolean {\n if (!error || typeof error !== 'object') {\n return false;\n }\n\n const { code } = error as NodeJS.ErrnoException;\n return code === 'ENOENT' || code === 'ENOTDIR';\n}\n\ninterface IBaseCachedEntrypoint {\n dependencies: Map<string, { resolved: string | null }>;\n initialCode?: string;\n invalidateOnDependencyChange?: Set<string>;\n invalidationDependencies?: Map<string, { resolved: string | null }>;\n}\n\ninterface ICaches<TEntrypoint extends IBaseCachedEntrypoint> {\n barrelManifests: Map<string, BarrelManifestCacheEntry>;\n entrypoints: Map<string, TEntrypoint>;\n exports: Map<string, string[]>;\n}\n\ntype MapValue<T> = T extends Map<string, infer V> ? V : never;\n\nconst cacheLogger = logger.extend('cache');\n\nconst cacheNames = ['barrelManifests', 'entrypoints', 'exports'] as const;\ntype CacheNames = (typeof cacheNames)[number];\n\nconst loggers = cacheNames.reduce(\n (acc, key) => ({\n ...acc,\n [key]: cacheLogger.extend(key),\n }),\n {} as Record<CacheNames, typeof logger>\n);\n\nexport class TransformCacheCollection<\n TEntrypoint extends IBaseCachedEntrypoint = Entrypoint | IEvaluatedEntrypoint,\n> {\n public readonly barrelManifests: Map<string, BarrelManifestCacheEntry>;\n\n public readonly entrypoints: Map<string, TEntrypoint>;\n\n public readonly exports: Map<string, string[]>;\n\n private readonly barrelManifestDependencies = new Map<string, Set<string>>();\n\n private contentHashes = new Map<string, { fs?: string; loaded?: string }>();\n\n private fileMtimes = new Map<string, number>();\n\n private readonly exportDependencies = new Map<string, Set<string>>();\n\n constructor(caches: Partial<ICaches<TEntrypoint>> = {}) {\n this.barrelManifests = caches.barrelManifests || new Map();\n this.entrypoints = caches.entrypoints || new Map();\n this.exports = caches.exports || new Map();\n }\n\n public add<\n TCache extends CacheNames,\n TValue extends MapValue<ICaches<TEntrypoint>[TCache]>,\n >(cacheName: TCache, key: string, value: TValue): void {\n const cache = this[cacheName] as Map<string, TValue>;\n loggers[cacheName]('%s:add %s %f', getFileIdx(key), key, () => {\n if (value === undefined) {\n return cache.has(key) ? 'removed' : 'noop';\n }\n\n if (!cache.has(key)) {\n return 'added';\n }\n\n return cache.get(key) === value ? 'unchanged' : 'updated';\n });\n\n if (value === undefined) {\n cache.delete(key);\n this.contentHashes.delete(key);\n this.clearCacheDependencies(cacheName, key);\n return;\n }\n\n this.clearCacheDependencies(cacheName, key);\n cache.set(key, value);\n\n if ('initialCode' in value) {\n const maybeOriginalCode = (value as unknown as { originalCode?: unknown })\n .originalCode;\n const isLoaded = typeof value.initialCode === 'string';\n const source = isLoaded ? 'loaded' : 'fs';\n\n let resolvedCode: string | undefined;\n if (isLoaded) {\n resolvedCode = value.initialCode;\n } else if (typeof maybeOriginalCode === 'string') {\n resolvedCode = maybeOriginalCode;\n }\n\n if (resolvedCode !== undefined) {\n this.setContentHash(key, source, hashContent(resolvedCode));\n return;\n }\n\n try {\n const fileContent = fs.readFileSync(stripQueryAndHash(key), 'utf8');\n this.setContentHash(key, source, hashContent(fileContent));\n } catch {\n this.setContentHash(key, source, hashContent(''));\n }\n\n return;\n }\n\n if (cacheName === 'barrelManifests') {\n try {\n const fileContent = fs.readFileSync(stripQueryAndHash(key), 'utf8');\n this.setContentHash(key, 'fs', hashContent(fileContent));\n } catch {\n this.setContentHash(key, 'fs', hashContent(''));\n }\n }\n }\n\n public clear(cacheName: CacheNames | 'all'): void {\n if (cacheName === 'all') {\n cacheNames.forEach((name) => {\n this.clear(name);\n });\n\n return;\n }\n\n loggers[cacheName]('clear');\n const cache = this[cacheName] as Map<string, unknown>;\n\n cache.clear();\n this.clearCacheDependencies(cacheName);\n }\n\n public delete(cacheName: CacheNames, key: string): void {\n this.invalidate(cacheName, key);\n }\n\n public get<\n TCache extends CacheNames,\n TValue extends MapValue<ICaches<TEntrypoint>[TCache]>,\n >(cacheName: TCache, key: string): TValue | undefined {\n const cache = this[cacheName] as Map<string, TValue>;\n\n const res = cache.get(key);\n loggers[cacheName]('get', key, res === undefined ? 'miss' : 'hit');\n return res;\n }\n\n public has(cacheName: CacheNames, key: string): boolean {\n const cache = this[cacheName] as Map<string, unknown>;\n\n const res = cache.has(key);\n loggers[cacheName]('has', key, res);\n return res;\n }\n\n public invalidate(cacheName: CacheNames, key: string): void {\n const cache = this[cacheName] as Map<string, unknown>;\n if (!cache.has(key)) {\n return;\n }\n\n loggers[cacheName]('invalidate', key);\n\n cache.delete(key);\n this.clearCacheDependencies(cacheName, key);\n }\n\n public invalidateForFile(filename: string) {\n cacheNames.forEach((cacheName) => {\n this.invalidate(cacheName, filename);\n });\n }\n\n public invalidateIfChanged(\n filename: string,\n content: string,\n previousVisitedFiles?: Set<string>,\n source: 'fs' | 'loaded' = 'loaded',\n changedFiles = new Set<string>()\n ) {\n if (changedFiles.has(filename)) {\n return true;\n }\n\n const visitedFiles = new Set(previousVisitedFiles);\n const fileEntrypoint = this.get('entrypoints', filename);\n let anyDepChanged = false;\n\n // We need to check all dependencies of the file\n // because they might have changed as well.\n if (\n !visitedFiles.has(filename) &&\n (fileEntrypoint || this.hasCachedDependencies(filename))\n ) {\n visitedFiles.add(filename);\n const invalidateOnDependencyChange =\n fileEntrypoint?.invalidateOnDependencyChange;\n\n const dependenciesToCheck = new Map<\n string,\n { resolved: string | null }\n >();\n\n for (const [key, dependency] of fileEntrypoint?.dependencies ?? []) {\n dependenciesToCheck.set(key, dependency);\n }\n\n for (const [\n key,\n dependency,\n ] of fileEntrypoint?.invalidationDependencies ?? []) {\n if (!dependenciesToCheck.has(key)) {\n dependenciesToCheck.set(key, dependency);\n }\n }\n\n for (const dependencyFilename of this.getCachedDependencies(filename)) {\n if (\n ![...dependenciesToCheck.values()].some(\n (dependency) => dependency.resolved === dependencyFilename\n )\n ) {\n dependenciesToCheck.set(dependencyFilename, {\n resolved: dependencyFilename,\n });\n }\n }\n\n for (const [, dependency] of dependenciesToCheck) {\n const dependencyFilename = dependency.resolved;\n\n if (dependencyFilename) {\n let dependencyContent: string;\n try {\n dependencyContent = fs.readFileSync(\n stripQueryAndHash(dependencyFilename),\n 'utf8'\n );\n } catch (error) {\n if (!isMissingFileError(error)) {\n throw error;\n }\n\n this.invalidateForFile(dependencyFilename);\n anyDepChanged = true;\n // eslint-disable-next-line no-continue\n continue;\n }\n\n const dependencyChanged = this.invalidateIfChanged(\n dependencyFilename,\n dependencyContent,\n visitedFiles,\n 'fs',\n changedFiles\n );\n\n if (\n dependencyChanged &&\n invalidateOnDependencyChange?.has(dependencyFilename)\n ) {\n cacheLogger(\n 'dependency affecting output has changed, invalidate all for %s',\n filename\n );\n this.invalidateForFile(filename);\n changedFiles.add(filename);\n\n return true;\n }\n\n if (dependencyChanged) {\n anyDepChanged = true;\n }\n }\n }\n }\n\n const existing = this.contentHashes.get(filename);\n const previousHash = existing?.[source];\n const newHash = hashContent(content);\n\n if (previousHash === undefined) {\n const otherSource = source === 'fs' ? 'loaded' : 'fs';\n const otherHash = existing?.[otherSource];\n\n if ((otherHash !== undefined && otherHash !== newHash) || anyDepChanged) {\n cacheLogger('content has changed, invalidate all for %s', filename);\n this.setContentHash(filename, source, newHash);\n this.invalidateForFile(filename);\n changedFiles.add(filename);\n\n return true;\n }\n\n this.setContentHash(filename, source, newHash);\n if (anyDepChanged) {\n this.invalidateForFile(filename);\n changedFiles.add(filename);\n return true;\n }\n return false;\n }\n\n if (previousHash !== newHash || anyDepChanged) {\n cacheLogger('content has changed, invalidate all for %s', filename);\n this.setContentHash(filename, source, newHash);\n this.invalidateForFile(filename);\n changedFiles.add(filename);\n\n return true;\n }\n\n return false;\n }\n\n public setCacheDependencies(\n cacheName: 'barrelManifests' | 'exports',\n key: string,\n dependencies: Iterable<string>\n ): void {\n const cache = this.getDependencyCache(cacheName);\n const nextDependencies = new Set(\n [...dependencies].filter((dependency) => dependency.length > 0)\n );\n\n if (nextDependencies.size === 0) {\n cache.delete(key);\n return;\n }\n\n cache.set(key, nextDependencies);\n }\n\n private clearCacheDependencies(cacheName: CacheNames | 'all', key?: string) {\n if (cacheName === 'all') {\n this.barrelManifestDependencies.clear();\n this.exportDependencies.clear();\n return;\n }\n\n if (cacheName === 'barrelManifests') {\n if (key === undefined) {\n this.barrelManifestDependencies.clear();\n } else {\n this.barrelManifestDependencies.delete(key);\n }\n return;\n }\n\n if (cacheName === 'exports') {\n if (key === undefined) {\n this.exportDependencies.clear();\n } else {\n this.exportDependencies.delete(key);\n }\n }\n }\n\n private getCachedDependencies(filename: string): Set<string> {\n return new Set([\n ...(this.barrelManifestDependencies.get(filename) ?? []),\n ...(this.exportDependencies.get(filename) ?? []),\n ]);\n }\n\n private getDependencyCache(cacheName: 'barrelManifests' | 'exports') {\n return cacheName === 'barrelManifests'\n ? this.barrelManifestDependencies\n : this.exportDependencies;\n }\n\n private hasCachedDependencies(filename: string): boolean {\n return this.getCachedDependencies(filename).size > 0;\n }\n\n /**\n * Fast check if a file changed on disk since last seen.\n * Uses mtime as a fast path — only reads the file if mtime differs.\n * Returns true if the file changed (cache was invalidated).\n */\n public checkFreshness(filename: string, strippedFilename: string): boolean {\n try {\n const currentMtime = fs.statSync(strippedFilename).mtimeMs;\n const cachedMtime = this.fileMtimes.get(filename);\n\n if (cachedMtime !== undefined && currentMtime === cachedMtime) {\n return false;\n }\n\n const content = fs.readFileSync(strippedFilename, 'utf-8');\n this.fileMtimes.set(filename, currentMtime);\n\n if (this.invalidateIfChanged(filename, content, undefined, 'fs')) {\n return true;\n }\n\n return false;\n } catch (error) {\n if (!isMissingFileError(error)) {\n throw error;\n }\n\n this.invalidateForFile(filename);\n return true;\n }\n }\n\n private setContentHash(\n filename: string,\n source: 'fs' | 'loaded',\n hash: string\n ) {\n const current = this.contentHashes.get(filename);\n if (current) {\n current[source] = hash;\n } else {\n this.contentHashes.set(filename, { [source]: hash });\n }\n\n if (source === 'fs') {\n try {\n this.fileMtimes.set(\n filename,\n fs.statSync(stripQueryAndHash(filename)).mtimeMs\n );\n } catch {\n // ignore\n }\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
package/lib/module.js
CHANGED
|
@@ -301,18 +301,23 @@ class Module {
|
|
|
301
301
|
}
|
|
302
302
|
}
|
|
303
303
|
getEntrypoint(filename, only, log) {
|
|
304
|
-
var _entrypoint$evaluated;
|
|
304
|
+
var _entrypoint$evaluated, _entrypoint;
|
|
305
305
|
const strippedFilename = (0, _parseRequest.stripQueryAndHash)(filename);
|
|
306
306
|
const extension = _path.default.extname(strippedFilename);
|
|
307
307
|
if (extension !== '.json' && !this.extensions.includes(extension)) {
|
|
308
308
|
return null;
|
|
309
309
|
}
|
|
310
|
-
|
|
310
|
+
let entrypoint = this.cache.get('entrypoints', filename);
|
|
311
311
|
if (entrypoint && (0, _Entrypoint2.isSuperSet)((_entrypoint$evaluated = entrypoint.evaluatedOnly) !== null && _entrypoint$evaluated !== void 0 ? _entrypoint$evaluated : [], only)) {
|
|
312
|
-
|
|
313
|
-
|
|
312
|
+
if (this.cache.checkFreshness(filename, strippedFilename)) {
|
|
313
|
+
entrypoint = undefined;
|
|
314
|
+
}
|
|
315
|
+
if (entrypoint) {
|
|
316
|
+
log('✅ file has been already evaluated');
|
|
317
|
+
return entrypoint;
|
|
318
|
+
}
|
|
314
319
|
}
|
|
315
|
-
if (entrypoint !== null &&
|
|
320
|
+
if ((_entrypoint = entrypoint) !== null && _entrypoint !== void 0 && _entrypoint.ignored) {
|
|
316
321
|
log('✅ file has been ignored during prepare stage. Original code will be used');
|
|
317
322
|
return entrypoint;
|
|
318
323
|
}
|
package/lib/module.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module.js","names":["_fs","_interopRequireDefault","require","_module","_path","_vm","_tsInvariant","_shared","_Entrypoint","_Entrypoint2","_UnprocessedEntrypointError","_importOverrides","_parseRequest","_createVmContext","e","__esModule","default","CJS_DEFAULT_CONDITIONS","expandConditions","conditionNames","result","Set","name","d","add","isBarePackageSubpath","id","startsWith","path","isAbsolute","split","length","includes","DefaultModuleImplementation","exports","NativeModule","builtins","assert","buffer","child_process","cluster","console","constants","crypto","dgram","dns","domain","events","fs","http","https","module","net","os","punycode","process","querystring","readline","repl","stream","string_decoder","sys","timers","tls","tty","url","util","vm","zlib","VITE_VIRTUAL_PREFIX","REACT_REFRESH_VIRTUAL_ID","reactRefreshRuntime","createSignatureFunctionForTransform","NOOP","browserOnlyEvalHintTriggers","getBrowserOnlyEvalHint","error","message","Error","String","looksLikeBrowserOnly","some","trigger","join","warnedUnknownImportsByServices","WeakMap","emitWarning","services","warn","getWarnedUnknownImports","cached","get","created","set","getUncached","test","cachedSet","has","filter","t","resolve","resolved","resolveDependency","invariant","defaultImportLoaders","raw","Module","callstack","isEvaluated","Object","assign","dependencies","push","debug","dependency","source","loaded","loadByImportLoaders","handled","value","entrypoint","getEntrypoint","only","evaluated","isSuperSet","evaluatedOnly","m","createChild","evaluate","ensure","bind","entrypointRef","constructor","parentModule","moduleImpl","_parentModule$ignored","_entrypoint$ignored","cache","isFeatureEnabled","options","pluginOptions","features","WeakRef","idx","filename","log","extend","parentIsIgnored","ignored","extensions","deref","assertTransformed","evaluatedCreated","supersededWith","createEvaluated","transformedCode","stripQueryAndHash","JSON","parse","context","teardown","createVmContext","__wyw_dynamic_import","__dirname","dirname","overrideContext","script","Script","runInContext","isUnprocessedEntrypointError","EvalError","baseMessage","hint","_entrypoint$evaluated","strippedFilename","extension","extname","newEntrypoint","readFileSync","stack","getStack","uncachedExports","reprocessOnly","_entrypoint$evaluated2","_entrypoint$only","_entrypoint$evaluated3","evaluatedExports","mergeOnly","code","Entrypoint","createRoot","resolveWithConditions","parent","conditions","resolveOptions","undefined","shouldRetryWithExtensions","_resolveFilename","ext","getDependency","Promise","_extensions","added","_override$unknown","forEach","strippedId","paths","_nodeModulePaths","isFileSpecifier","endsWith","existsSync","slice","root","keyInfo","toImportKey","override","getImportOverride","importOverrides","key","policy","unknown","mock","shouldWarn","finalResolved","resolveMockSpecifier","importer","_message","errorMessage","map","item","Boolean","warnedUnknownImports","stringify","applyImportOverrideToOnly","request","importLoaders","query","hash","parseRequest","params","URLSearchParams","matchedKey","Array","from","keys","find","loader","importerDir","toUrl","relative","replace","posix","sep","readFile"],"sources":["../src/module.ts"],"sourcesContent":["/**\n * This is a custom implementation for the module system for evaluating code,\n * used for resolving values for dependencies interpolated in `css` or `styled`.\n *\n * This serves 2 purposes:\n * - Avoid leakage from evaluated code to module cache in current context, e.g. `babel-register`\n * - Allow us to invalidate the module cache without affecting other stuff, necessary for rebuilds\n *\n * We also use it to transpile the code with Babel by default.\n * We also store source maps for it to provide correct error stacktraces.\n *\n */\n\nimport fs from 'fs';\nimport NativeModule from 'module';\nimport path from 'path';\nimport vm from 'vm';\n\nimport { invariant } from 'ts-invariant';\n\nimport {\n isFeatureEnabled,\n type Debugger,\n type ImportLoaderContext,\n type ImportLoaders,\n} from '@wyw-in-js/shared';\n\nimport './utils/dispose-polyfill';\nimport type { TransformCacheCollection } from './cache';\nimport { Entrypoint } from './transform/Entrypoint';\nimport {\n getStack,\n isSuperSet,\n mergeOnly,\n} from './transform/Entrypoint.helpers';\nimport type { IEntrypointDependency } from './transform/Entrypoint.types';\nimport type { IEvaluatedEntrypoint } from './transform/EvaluatedEntrypoint';\nimport { isUnprocessedEntrypointError } from './transform/actions/UnprocessedEntrypointError';\nimport type { Services } from './transform/types';\nimport {\n applyImportOverrideToOnly,\n getImportOverride,\n resolveMockSpecifier,\n toImportKey,\n} from './utils/importOverrides';\nimport { parseRequest, stripQueryAndHash } from './utils/parseRequest';\nimport { createVmContext } from './vm/createVmContext';\n\ntype HiddenModuleMembers = {\n _extensions: Record<string, () => void>;\n _resolveFilename: (\n id: string,\n options: { filename: string; id: string; paths: string[] },\n isMain?: boolean,\n resolveOptions?: { conditions?: Set<string> }\n ) => string;\n _nodeModulePaths(filename: string): string[];\n};\n\nconst CJS_DEFAULT_CONDITIONS = ['require', 'node', 'default'] as const;\n\nfunction expandConditions(conditionNames: string[]): Set<string> {\n const result = new Set<string>();\n for (const name of conditionNames) {\n if (name === '...') {\n for (const d of CJS_DEFAULT_CONDITIONS) result.add(d);\n } else {\n result.add(name);\n }\n }\n return result;\n}\n\nfunction isBarePackageSubpath(id: string): boolean {\n if (id.startsWith('.') || path.isAbsolute(id)) {\n return false;\n }\n\n if (id.startsWith('@')) {\n return id.split('/').length > 2;\n }\n\n return id.includes('/');\n}\n\nexport const DefaultModuleImplementation = NativeModule as typeof NativeModule &\n HiddenModuleMembers;\n\n// Supported node builtins based on the modules polyfilled by webpack\n// `true` means module is polyfilled, `false` means module is empty\nconst builtins = {\n assert: true,\n buffer: true,\n child_process: false,\n cluster: false,\n console: true,\n constants: true,\n crypto: true,\n dgram: false,\n dns: false,\n domain: true,\n events: true,\n fs: false,\n http: true,\n https: true,\n module: false,\n net: false,\n os: true,\n path: true,\n punycode: true,\n process: true,\n querystring: true,\n readline: false,\n repl: false,\n stream: true,\n string_decoder: true,\n sys: true,\n timers: true,\n tls: false,\n tty: true,\n url: true,\n util: true,\n vm: true,\n zlib: true,\n};\n\nconst VITE_VIRTUAL_PREFIX = '/@';\nconst REACT_REFRESH_VIRTUAL_ID = '/@react-refresh';\nconst reactRefreshRuntime = {\n createSignatureFunctionForTransform: () => () => {},\n};\n\nconst NOOP = () => {};\n\nconst browserOnlyEvalHintTriggers = [\n 'window is not defined',\n \"evaluating 'window\",\n 'document is not defined',\n \"evaluating 'document\",\n 'navigator is not defined',\n \"evaluating 'navigator\",\n 'self is not defined',\n \"evaluating 'self\",\n];\n\nconst getBrowserOnlyEvalHint = (error: unknown): string | null => {\n const message = error instanceof Error ? error.message : String(error);\n const looksLikeBrowserOnly = browserOnlyEvalHintTriggers.some((trigger) =>\n message.includes(trigger)\n );\n if (!looksLikeBrowserOnly) return null;\n\n return [\n '',\n '[wyw-in-js] Evaluation hint:',\n 'This usually means browser-only code ran during build-time evaluation.',\n 'Move browser-only initialization out of evaluated modules, or mock the import via `importOverrides`.',\n \"Example: importOverrides: { 'msw/browser': { mock: './src/__mocks__/msw-browser.js' } }\",\n ].join('\\n');\n};\n\nconst warnedUnknownImportsByServices = new WeakMap<Services, Set<string>>();\n\nfunction emitWarning(services: Services, message: string) {\n if (services.emitWarning) {\n services.emitWarning(message);\n return;\n }\n\n // eslint-disable-next-line no-console\n console.warn(message);\n}\n\nfunction getWarnedUnknownImports(services: Services): Set<string> {\n const cached = warnedUnknownImportsByServices.get(services);\n if (cached) {\n return cached;\n }\n\n const created = new Set<string>();\n warnedUnknownImportsByServices.set(services, created);\n return created;\n}\n\nfunction getUncached(cached: string | string[], test: string[]): string[] {\n const cachedSet = new Set(\n typeof cached === 'string' ? cached.split(',') : cached\n );\n\n if (cachedSet.has('*')) {\n return [];\n }\n\n return test.filter((t) => !cachedSet.has(t));\n}\n\nfunction resolve(\n this: { resolveDependency: (id: string) => IEntrypointDependency },\n id: string\n): string {\n const { resolved } = this.resolveDependency(id);\n invariant(resolved, `Unable to resolve \"${id}\"`);\n return resolved;\n}\n\nconst defaultImportLoaders: ImportLoaders = {\n raw: 'raw',\n url: 'url',\n};\n\nexport class Module {\n public readonly callstack: string[] = [];\n\n public readonly debug: Debugger;\n\n public readonly dependencies: string[];\n\n public readonly extensions: string[];\n\n public readonly filename: string;\n\n public id: string;\n\n public readonly idx: string;\n\n public readonly ignored: boolean;\n\n public isEvaluated: boolean = false;\n\n public readonly parentIsIgnored: boolean;\n\n public require: {\n (id: string): unknown;\n ensure: () => void;\n resolve: (id: string) => string;\n } = Object.assign(\n (id: string) => {\n if (id === REACT_REFRESH_VIRTUAL_ID) {\n this.dependencies.push(id);\n this.debug('require', `vite virtual '${id}'`);\n return reactRefreshRuntime;\n }\n\n if (id.startsWith(VITE_VIRTUAL_PREFIX)) {\n this.dependencies.push(id);\n this.debug('require', `vite virtual '${id}'`);\n return {};\n }\n\n if (id in builtins) {\n // The module is in the allowed list of builtin node modules\n // Ideally we should prevent importing them, but webpack polyfills some\n // So we check for the list of polyfills to determine which ones to support\n if (builtins[id as keyof typeof builtins]) {\n this.debug('require', `builtin '${id}'`);\n return require(id);\n }\n\n return null;\n }\n\n // Resolve module id (and filename) relatively to parent module\n const dependency = this.resolveDependency(id);\n if (dependency.resolved === id && !path.isAbsolute(id)) {\n // The module is a builtin node modules, but not in the allowed list\n throw new Error(\n `Unable to import \"${id}\". Importing Node builtins is not supported in the sandbox.`\n );\n }\n\n invariant(\n dependency.resolved,\n `Dependency ${dependency.source} cannot be resolved`\n );\n\n const loaded = this.loadByImportLoaders(id, dependency.resolved);\n if (loaded.handled) {\n this.dependencies.push(id);\n this.debug('require', `${id} -> ${dependency.resolved} (loader)`);\n return loaded.value;\n }\n\n this.dependencies.push(id);\n\n this.debug('require', `${id} -> ${dependency.resolved}`);\n\n const entrypoint = this.getEntrypoint(\n dependency.resolved,\n dependency.only,\n this.debug\n );\n\n if (entrypoint === null) {\n return dependency.resolved;\n }\n\n if (\n entrypoint.evaluated ||\n isSuperSet(entrypoint.evaluatedOnly, dependency.only)\n ) {\n return entrypoint.exports;\n }\n\n const m = this.createChild(entrypoint);\n m.evaluate();\n\n return entrypoint.exports;\n },\n {\n ensure: NOOP,\n resolve: resolve.bind(this),\n }\n );\n\n public resolve = resolve.bind(this);\n\n private cache: TransformCacheCollection;\n\n #entrypointRef: WeakRef<Entrypoint> | Entrypoint;\n\n constructor(\n private services: Services,\n entrypoint: Entrypoint,\n parentModule?: Module,\n private moduleImpl: HiddenModuleMembers = DefaultModuleImplementation\n ) {\n this.cache = services.cache;\n this.#entrypointRef = isFeatureEnabled(\n services.options.pluginOptions.features,\n 'useWeakRefInEval',\n entrypoint.name\n )\n ? new WeakRef(entrypoint)\n : entrypoint;\n this.idx = entrypoint.idx;\n this.id = entrypoint.name;\n this.filename = entrypoint.name;\n this.dependencies = [];\n this.debug = entrypoint.log.extend('module');\n this.parentIsIgnored = parentModule?.ignored ?? false;\n this.ignored = entrypoint.ignored ?? this.parentIsIgnored;\n\n if (parentModule) {\n this.callstack = [entrypoint.name, ...parentModule.callstack];\n } else {\n this.callstack = [entrypoint.name];\n }\n\n this.extensions = services.options.pluginOptions.extensions;\n\n this.debug('init', entrypoint.name);\n }\n\n public get exports() {\n return this.entrypoint.exports;\n }\n\n public set exports(value) {\n this.entrypoint.exports = value;\n\n this.debug('the whole exports was overridden with %O', value);\n }\n\n protected get entrypoint(): Entrypoint {\n const entrypoint =\n this.#entrypointRef instanceof WeakRef\n ? this.#entrypointRef.deref()\n : this.#entrypointRef;\n invariant(entrypoint, `Module ${this.idx} is disposed`);\n return entrypoint;\n }\n\n evaluate(): void {\n const { entrypoint } = this;\n entrypoint.assertTransformed();\n\n const cached = this.cache.get('entrypoints', entrypoint.name)!;\n let evaluatedCreated = false;\n if (!entrypoint.supersededWith) {\n this.cache.add(\n 'entrypoints',\n entrypoint.name,\n entrypoint.createEvaluated()\n );\n evaluatedCreated = true;\n }\n\n const { transformedCode: source } = entrypoint;\n const { pluginOptions } = this.services.options;\n\n if (!source) {\n this.debug(`evaluate`, 'there is nothing to evaluate');\n return;\n }\n\n if (this.isEvaluated) {\n this.debug('evaluate', `is already evaluated`);\n return;\n }\n\n this.debug('evaluate');\n this.debug.extend('source')('%s', source);\n\n this.isEvaluated = true;\n\n const filename = stripQueryAndHash(this.filename);\n\n if (/\\.json$/.test(filename)) {\n // For JSON files, parse it to a JS object similar to Node\n this.exports = JSON.parse(source);\n return;\n }\n\n const { context, teardown } = createVmContext(\n filename,\n pluginOptions.features,\n {\n module: this,\n exports: entrypoint.exports,\n require: this.require,\n __wyw_dynamic_import: async (id: unknown) => this.require(String(id)),\n __dirname: path.dirname(filename),\n },\n pluginOptions.overrideContext\n );\n\n try {\n const script = new vm.Script(\n `(function (exports) { ${source}\\n})(exports);`,\n {\n filename,\n }\n );\n\n script.runInContext(context);\n } catch (e) {\n this.isEvaluated = false;\n if (evaluatedCreated) {\n this.cache.add('entrypoints', entrypoint.name, cached);\n }\n\n if (isUnprocessedEntrypointError(e)) {\n // It will be handled by evalFile scenario\n throw e;\n }\n\n if (e instanceof EvalError) {\n this.debug('%O', e);\n\n throw e;\n }\n\n this.debug('%O\\n%O', e, this.callstack);\n const baseMessage = `${(e as Error).message} in${this.callstack.join(\n '\\n| '\n )}\\n`;\n const hint = getBrowserOnlyEvalHint(e);\n\n throw new EvalError(hint ? `${baseMessage}${hint}\\n` : baseMessage);\n } finally {\n teardown();\n }\n }\n\n getEntrypoint(\n filename: string,\n only: string[],\n log: Debugger\n ): Entrypoint | IEvaluatedEntrypoint | null {\n const strippedFilename = stripQueryAndHash(filename);\n const extension = path.extname(strippedFilename);\n if (extension !== '.json' && !this.extensions.includes(extension)) {\n return null;\n }\n\n const entrypoint = this.cache.get('entrypoints', filename);\n if (entrypoint && isSuperSet(entrypoint.evaluatedOnly ?? [], only)) {\n log('✅ file has been already evaluated');\n return entrypoint;\n }\n\n if (entrypoint?.ignored) {\n log(\n '✅ file has been ignored during prepare stage. Original code will be used'\n );\n return entrypoint;\n }\n\n if (this.ignored) {\n log(\n '✅ one of the parent files has been ignored during prepare stage. Original code will be used'\n );\n\n const newEntrypoint = this.entrypoint.createChild(\n filename,\n ['*'],\n fs.readFileSync(strippedFilename, 'utf-8')\n );\n\n if (newEntrypoint === 'loop') {\n const stack = getStack(this.entrypoint);\n throw new Error(\n `Circular dependency detected: ${stack.join(' -> ')} -> ${filename}`\n );\n }\n\n return newEntrypoint;\n }\n\n let uncachedExports: string[] | null = null;\n let reprocessOnly: string[] = only;\n // Requested file can be already prepared for evaluation on the stage 1\n if (only && entrypoint) {\n const evaluatedExports =\n entrypoint.evaluatedOnly?.length !== 0\n ? entrypoint.evaluatedOnly\n : entrypoint.only ?? [];\n uncachedExports = getUncached(evaluatedExports, only);\n if (uncachedExports.length === 0) {\n log('✅ ready for evaluation');\n return entrypoint;\n }\n\n if (entrypoint.evaluatedOnly?.length) {\n reprocessOnly = mergeOnly(evaluatedExports, only);\n }\n\n log(\n '❌ file has been processed during prepare stage but %o is not evaluated yet (evaluated: %o)',\n uncachedExports,\n evaluatedExports\n );\n } else {\n log('❌ file has not been processed during prepare stage');\n }\n\n // If code wasn't extracted from cache, it indicates that we were unable\n // to process some of the imports on stage1. Let's try to reprocess.\n const code = fs.readFileSync(strippedFilename, 'utf-8');\n const newEntrypoint = Entrypoint.createRoot(\n this.services,\n filename,\n reprocessOnly,\n code\n );\n\n if (newEntrypoint.evaluated) {\n log('✅ file has been already evaluated');\n return newEntrypoint;\n }\n\n if (newEntrypoint.ignored) {\n log(\n '✅ file has been ignored during prepare stage. Original code will be used'\n );\n return newEntrypoint;\n }\n\n return newEntrypoint;\n }\n\n private resolveWithConditions(\n id: string,\n parent: { id: string; filename: string; paths: string[] },\n conditions?: Set<string>\n ): string {\n const resolveOptions = conditions ? { conditions } : undefined;\n const shouldRetryWithExtensions =\n conditions &&\n path.extname(id) === '' &&\n (id.startsWith('.') || path.isAbsolute(id) || isBarePackageSubpath(id));\n try {\n return this.moduleImpl._resolveFilename(\n id,\n parent,\n false,\n resolveOptions\n );\n } catch (e: unknown) {\n if (\n shouldRetryWithExtensions &&\n e instanceof Error &&\n (e as NodeJS.ErrnoException).code === 'MODULE_NOT_FOUND'\n ) {\n // Extensionless subpath requests (e.g. \"pkg/src/*\" or \"./src/*\") may\n // resolve to extensionless targets via conditional exports. Retry with\n // each known extension, but never rewrite already explicit specifiers.\n for (const ext of this.extensions) {\n try {\n return this.moduleImpl._resolveFilename(\n id + ext,\n parent,\n false,\n resolveOptions\n );\n } catch {\n // try next extension\n }\n }\n }\n throw e;\n }\n }\n\n resolveDependency = (id: string): IEntrypointDependency => {\n const cached = this.entrypoint.getDependency(id);\n invariant(!(cached instanceof Promise), 'Dependency is not resolved yet');\n\n if (cached) {\n return cached;\n }\n\n if (!this.ignored) {\n this.debug(\n '❌ import has not been resolved during prepare stage. Fallback to Node.js resolver'\n );\n }\n\n const extensions = this.moduleImpl._extensions;\n const added: string[] = [];\n\n try {\n // Check for supported extensions\n this.extensions.forEach((ext) => {\n if (ext in extensions) {\n return;\n }\n\n // When an extension is not supported, add it\n // And keep track of it to clean it up after resolving\n // Use noop for the transform function since we handle it\n extensions[ext] = NOOP;\n added.push(ext);\n });\n\n const { filename } = this;\n const strippedId = stripQueryAndHash(id);\n\n const parent = {\n id: filename,\n filename,\n paths: this.moduleImpl._nodeModulePaths(path.dirname(filename)),\n };\n const { conditionNames } = this.services.options.pluginOptions;\n const conditions = conditionNames?.length\n ? expandConditions(conditionNames)\n : undefined;\n\n let resolved = this.resolveWithConditions(strippedId, parent, conditions);\n\n const isFileSpecifier =\n strippedId.startsWith('.') || path.isAbsolute(strippedId);\n\n if (\n isFileSpecifier &&\n path.extname(strippedId) === '' &&\n resolved.endsWith('.cjs') &&\n fs.existsSync(`${resolved.slice(0, -4)}.js`)\n ) {\n // When both `.cjs` and `.js` exist for an extensionless specifier, the\n // resolver may pick `.cjs` depending on the environment/extensions.\n // Prefer `.js` to keep resolved paths stable (e.g. importOverrides keys).\n resolved = `${resolved.slice(0, -4)}.js`;\n }\n\n const { root } = this.services.options;\n const keyInfo = toImportKey({\n source: id,\n resolved,\n root,\n });\n\n const override = getImportOverride(\n this.services.options.pluginOptions.importOverrides,\n keyInfo.key\n );\n\n const policy = override?.unknown ?? (override?.mock ? 'allow' : 'warn');\n const shouldWarn = !this.ignored && policy === 'warn';\n\n let finalResolved = resolved;\n if (override?.mock) {\n try {\n finalResolved = resolveMockSpecifier({\n mock: override.mock,\n importer: filename,\n root,\n stack: this.callstack,\n });\n } catch (e) {\n const errorMessage = String((e as Error)?.message ?? e);\n throw new Error(\n `[wyw-in-js] Failed to resolve import mock for \"${keyInfo.key}\" (${id} from ${filename}): ${errorMessage}`\n );\n }\n }\n\n if (policy === 'error') {\n throw new Error(\n [\n `[wyw-in-js] Unknown import reached during eval (Node resolver fallback)`,\n ``,\n `importer: ${filename}`,\n `source: ${id}`,\n `resolved: ${resolved}`,\n override?.mock\n ? `mock: ${override.mock} -> ${finalResolved}`\n : ``,\n ``,\n `callstack:`,\n ...this.callstack.map((item) => ` ${item}`),\n ``,\n `config key: ${keyInfo.key}`,\n ]\n .filter(Boolean)\n .join('\\n')\n );\n }\n\n const warnedUnknownImports = getWarnedUnknownImports(this.services);\n\n if (shouldWarn && !warnedUnknownImports.has(keyInfo.key)) {\n warnedUnknownImports.add(keyInfo.key);\n emitWarning(\n this.services,\n [\n `[wyw-in-js] Unknown import reached during eval (Node resolver fallback)`,\n ``,\n `importer: ${filename}`,\n `source: ${id}`,\n `resolved: ${resolved}`,\n override?.mock\n ? `mock: ${override.mock} -> ${finalResolved}`\n : ``,\n ``,\n `callstack:`,\n ...this.callstack.map((item) => ` ${item}`),\n ``,\n `config key: ${keyInfo.key}`,\n `hint: add { importOverrides: { ${JSON.stringify(\n keyInfo.key\n )}: { unknown: 'allow' } } } to silence warnings, or use { mock } / { noShake: true } overrides.`,\n ]\n .filter(Boolean)\n .join('\\n')\n );\n }\n\n return {\n source: id,\n only: applyImportOverrideToOnly(['*'], override),\n resolved: finalResolved,\n };\n } finally {\n // Cleanup the extensions we added to restore previous behaviour\n added.forEach((ext) => delete extensions[ext]);\n }\n };\n\n protected createChild(entrypoint: Entrypoint): Module {\n return new Module(this.services, entrypoint, this, this.moduleImpl);\n }\n\n private loadByImportLoaders(\n request: string,\n resolved: string\n ): { handled: boolean; value: unknown } {\n const { pluginOptions } = this.services.options;\n const importLoaders =\n pluginOptions.importLoaders === undefined\n ? defaultImportLoaders\n : { ...defaultImportLoaders, ...pluginOptions.importLoaders };\n\n const { query, hash } = parseRequest(request);\n if (!query) return { handled: false, value: undefined };\n\n const params = new URLSearchParams(query);\n const matchedKey = Array.from(params.keys()).find(\n (key) => importLoaders[key] !== undefined && importLoaders[key] !== false\n );\n\n if (!matchedKey) return { handled: false, value: undefined };\n\n const loader = importLoaders[matchedKey];\n\n const filename = stripQueryAndHash(resolved);\n const importer = stripQueryAndHash(this.filename);\n const importerDir = path.dirname(importer);\n\n const toUrl = () => {\n const relative = path\n .relative(importerDir, filename)\n .replace(/\\\\/g, path.posix.sep);\n\n if (relative.startsWith('.') || path.isAbsolute(relative)) {\n return relative;\n }\n\n return `./${relative}`;\n };\n\n const readFile = () => fs.readFileSync(filename, 'utf-8');\n\n const context: ImportLoaderContext = {\n importer,\n request,\n resolved,\n filename,\n query,\n hash,\n emitWarning: (message) => emitWarning(this.services, message),\n readFile,\n toUrl,\n };\n\n if (loader === 'raw') {\n return { handled: true, value: context.readFile() };\n }\n\n if (loader === 'url') {\n return { handled: true, value: context.toUrl() };\n }\n\n if (typeof loader === 'function') {\n return { handled: true, value: loader(context) };\n }\n\n return { handled: false, value: undefined };\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"module.js","names":["_fs","_interopRequireDefault","require","_module","_path","_vm","_tsInvariant","_shared","_Entrypoint","_Entrypoint2","_UnprocessedEntrypointError","_importOverrides","_parseRequest","_createVmContext","e","__esModule","default","CJS_DEFAULT_CONDITIONS","expandConditions","conditionNames","result","Set","name","d","add","isBarePackageSubpath","id","startsWith","path","isAbsolute","split","length","includes","DefaultModuleImplementation","exports","NativeModule","builtins","assert","buffer","child_process","cluster","console","constants","crypto","dgram","dns","domain","events","fs","http","https","module","net","os","punycode","process","querystring","readline","repl","stream","string_decoder","sys","timers","tls","tty","url","util","vm","zlib","VITE_VIRTUAL_PREFIX","REACT_REFRESH_VIRTUAL_ID","reactRefreshRuntime","createSignatureFunctionForTransform","NOOP","browserOnlyEvalHintTriggers","getBrowserOnlyEvalHint","error","message","Error","String","looksLikeBrowserOnly","some","trigger","join","warnedUnknownImportsByServices","WeakMap","emitWarning","services","warn","getWarnedUnknownImports","cached","get","created","set","getUncached","test","cachedSet","has","filter","t","resolve","resolved","resolveDependency","invariant","defaultImportLoaders","raw","Module","callstack","isEvaluated","Object","assign","dependencies","push","debug","dependency","source","loaded","loadByImportLoaders","handled","value","entrypoint","getEntrypoint","only","evaluated","isSuperSet","evaluatedOnly","m","createChild","evaluate","ensure","bind","entrypointRef","constructor","parentModule","moduleImpl","_parentModule$ignored","_entrypoint$ignored","cache","isFeatureEnabled","options","pluginOptions","features","WeakRef","idx","filename","log","extend","parentIsIgnored","ignored","extensions","deref","assertTransformed","evaluatedCreated","supersededWith","createEvaluated","transformedCode","stripQueryAndHash","JSON","parse","context","teardown","createVmContext","__wyw_dynamic_import","__dirname","dirname","overrideContext","script","Script","runInContext","isUnprocessedEntrypointError","EvalError","baseMessage","hint","_entrypoint$evaluated","_entrypoint","strippedFilename","extension","extname","checkFreshness","undefined","newEntrypoint","readFileSync","stack","getStack","uncachedExports","reprocessOnly","_entrypoint$evaluated2","_entrypoint$only","_entrypoint$evaluated3","evaluatedExports","mergeOnly","code","Entrypoint","createRoot","resolveWithConditions","parent","conditions","resolveOptions","shouldRetryWithExtensions","_resolveFilename","ext","getDependency","Promise","_extensions","added","_override$unknown","forEach","strippedId","paths","_nodeModulePaths","isFileSpecifier","endsWith","existsSync","slice","root","keyInfo","toImportKey","override","getImportOverride","importOverrides","key","policy","unknown","mock","shouldWarn","finalResolved","resolveMockSpecifier","importer","_message","errorMessage","map","item","Boolean","warnedUnknownImports","stringify","applyImportOverrideToOnly","request","importLoaders","query","hash","parseRequest","params","URLSearchParams","matchedKey","Array","from","keys","find","loader","importerDir","toUrl","relative","replace","posix","sep","readFile"],"sources":["../src/module.ts"],"sourcesContent":["/**\n * This is a custom implementation for the module system for evaluating code,\n * used for resolving values for dependencies interpolated in `css` or `styled`.\n *\n * This serves 2 purposes:\n * - Avoid leakage from evaluated code to module cache in current context, e.g. `babel-register`\n * - Allow us to invalidate the module cache without affecting other stuff, necessary for rebuilds\n *\n * We also use it to transpile the code with Babel by default.\n * We also store source maps for it to provide correct error stacktraces.\n *\n */\n\nimport fs from 'fs';\nimport NativeModule from 'module';\nimport path from 'path';\nimport vm from 'vm';\n\nimport { invariant } from 'ts-invariant';\n\nimport {\n isFeatureEnabled,\n type Debugger,\n type ImportLoaderContext,\n type ImportLoaders,\n} from '@wyw-in-js/shared';\n\nimport './utils/dispose-polyfill';\nimport type { TransformCacheCollection } from './cache';\nimport { Entrypoint } from './transform/Entrypoint';\nimport {\n getStack,\n isSuperSet,\n mergeOnly,\n} from './transform/Entrypoint.helpers';\nimport type { IEntrypointDependency } from './transform/Entrypoint.types';\nimport type { IEvaluatedEntrypoint } from './transform/EvaluatedEntrypoint';\nimport { isUnprocessedEntrypointError } from './transform/actions/UnprocessedEntrypointError';\nimport type { Services } from './transform/types';\nimport {\n applyImportOverrideToOnly,\n getImportOverride,\n resolveMockSpecifier,\n toImportKey,\n} from './utils/importOverrides';\nimport { parseRequest, stripQueryAndHash } from './utils/parseRequest';\nimport { createVmContext } from './vm/createVmContext';\n\ntype HiddenModuleMembers = {\n _extensions: Record<string, () => void>;\n _resolveFilename: (\n id: string,\n options: { filename: string; id: string; paths: string[] },\n isMain?: boolean,\n resolveOptions?: { conditions?: Set<string> }\n ) => string;\n _nodeModulePaths(filename: string): string[];\n};\n\nconst CJS_DEFAULT_CONDITIONS = ['require', 'node', 'default'] as const;\n\nfunction expandConditions(conditionNames: string[]): Set<string> {\n const result = new Set<string>();\n for (const name of conditionNames) {\n if (name === '...') {\n for (const d of CJS_DEFAULT_CONDITIONS) result.add(d);\n } else {\n result.add(name);\n }\n }\n return result;\n}\n\nfunction isBarePackageSubpath(id: string): boolean {\n if (id.startsWith('.') || path.isAbsolute(id)) {\n return false;\n }\n\n if (id.startsWith('@')) {\n return id.split('/').length > 2;\n }\n\n return id.includes('/');\n}\n\nexport const DefaultModuleImplementation = NativeModule as typeof NativeModule &\n HiddenModuleMembers;\n\n// Supported node builtins based on the modules polyfilled by webpack\n// `true` means module is polyfilled, `false` means module is empty\nconst builtins = {\n assert: true,\n buffer: true,\n child_process: false,\n cluster: false,\n console: true,\n constants: true,\n crypto: true,\n dgram: false,\n dns: false,\n domain: true,\n events: true,\n fs: false,\n http: true,\n https: true,\n module: false,\n net: false,\n os: true,\n path: true,\n punycode: true,\n process: true,\n querystring: true,\n readline: false,\n repl: false,\n stream: true,\n string_decoder: true,\n sys: true,\n timers: true,\n tls: false,\n tty: true,\n url: true,\n util: true,\n vm: true,\n zlib: true,\n};\n\nconst VITE_VIRTUAL_PREFIX = '/@';\nconst REACT_REFRESH_VIRTUAL_ID = '/@react-refresh';\nconst reactRefreshRuntime = {\n createSignatureFunctionForTransform: () => () => {},\n};\n\nconst NOOP = () => {};\n\nconst browserOnlyEvalHintTriggers = [\n 'window is not defined',\n \"evaluating 'window\",\n 'document is not defined',\n \"evaluating 'document\",\n 'navigator is not defined',\n \"evaluating 'navigator\",\n 'self is not defined',\n \"evaluating 'self\",\n];\n\nconst getBrowserOnlyEvalHint = (error: unknown): string | null => {\n const message = error instanceof Error ? error.message : String(error);\n const looksLikeBrowserOnly = browserOnlyEvalHintTriggers.some((trigger) =>\n message.includes(trigger)\n );\n if (!looksLikeBrowserOnly) return null;\n\n return [\n '',\n '[wyw-in-js] Evaluation hint:',\n 'This usually means browser-only code ran during build-time evaluation.',\n 'Move browser-only initialization out of evaluated modules, or mock the import via `importOverrides`.',\n \"Example: importOverrides: { 'msw/browser': { mock: './src/__mocks__/msw-browser.js' } }\",\n ].join('\\n');\n};\n\nconst warnedUnknownImportsByServices = new WeakMap<Services, Set<string>>();\n\nfunction emitWarning(services: Services, message: string) {\n if (services.emitWarning) {\n services.emitWarning(message);\n return;\n }\n\n // eslint-disable-next-line no-console\n console.warn(message);\n}\n\nfunction getWarnedUnknownImports(services: Services): Set<string> {\n const cached = warnedUnknownImportsByServices.get(services);\n if (cached) {\n return cached;\n }\n\n const created = new Set<string>();\n warnedUnknownImportsByServices.set(services, created);\n return created;\n}\n\nfunction getUncached(cached: string | string[], test: string[]): string[] {\n const cachedSet = new Set(\n typeof cached === 'string' ? cached.split(',') : cached\n );\n\n if (cachedSet.has('*')) {\n return [];\n }\n\n return test.filter((t) => !cachedSet.has(t));\n}\n\nfunction resolve(\n this: { resolveDependency: (id: string) => IEntrypointDependency },\n id: string\n): string {\n const { resolved } = this.resolveDependency(id);\n invariant(resolved, `Unable to resolve \"${id}\"`);\n return resolved;\n}\n\nconst defaultImportLoaders: ImportLoaders = {\n raw: 'raw',\n url: 'url',\n};\n\nexport class Module {\n public readonly callstack: string[] = [];\n\n public readonly debug: Debugger;\n\n public readonly dependencies: string[];\n\n public readonly extensions: string[];\n\n public readonly filename: string;\n\n public id: string;\n\n public readonly idx: string;\n\n public readonly ignored: boolean;\n\n public isEvaluated: boolean = false;\n\n public readonly parentIsIgnored: boolean;\n\n public require: {\n (id: string): unknown;\n ensure: () => void;\n resolve: (id: string) => string;\n } = Object.assign(\n (id: string) => {\n if (id === REACT_REFRESH_VIRTUAL_ID) {\n this.dependencies.push(id);\n this.debug('require', `vite virtual '${id}'`);\n return reactRefreshRuntime;\n }\n\n if (id.startsWith(VITE_VIRTUAL_PREFIX)) {\n this.dependencies.push(id);\n this.debug('require', `vite virtual '${id}'`);\n return {};\n }\n\n if (id in builtins) {\n // The module is in the allowed list of builtin node modules\n // Ideally we should prevent importing them, but webpack polyfills some\n // So we check for the list of polyfills to determine which ones to support\n if (builtins[id as keyof typeof builtins]) {\n this.debug('require', `builtin '${id}'`);\n return require(id);\n }\n\n return null;\n }\n\n // Resolve module id (and filename) relatively to parent module\n const dependency = this.resolveDependency(id);\n if (dependency.resolved === id && !path.isAbsolute(id)) {\n // The module is a builtin node modules, but not in the allowed list\n throw new Error(\n `Unable to import \"${id}\". Importing Node builtins is not supported in the sandbox.`\n );\n }\n\n invariant(\n dependency.resolved,\n `Dependency ${dependency.source} cannot be resolved`\n );\n\n const loaded = this.loadByImportLoaders(id, dependency.resolved);\n if (loaded.handled) {\n this.dependencies.push(id);\n this.debug('require', `${id} -> ${dependency.resolved} (loader)`);\n return loaded.value;\n }\n\n this.dependencies.push(id);\n\n this.debug('require', `${id} -> ${dependency.resolved}`);\n\n const entrypoint = this.getEntrypoint(\n dependency.resolved,\n dependency.only,\n this.debug\n );\n\n if (entrypoint === null) {\n return dependency.resolved;\n }\n\n if (\n entrypoint.evaluated ||\n isSuperSet(entrypoint.evaluatedOnly, dependency.only)\n ) {\n return entrypoint.exports;\n }\n\n const m = this.createChild(entrypoint);\n m.evaluate();\n\n return entrypoint.exports;\n },\n {\n ensure: NOOP,\n resolve: resolve.bind(this),\n }\n );\n\n public resolve = resolve.bind(this);\n\n private cache: TransformCacheCollection;\n\n #entrypointRef: WeakRef<Entrypoint> | Entrypoint;\n\n constructor(\n private services: Services,\n entrypoint: Entrypoint,\n parentModule?: Module,\n private moduleImpl: HiddenModuleMembers = DefaultModuleImplementation\n ) {\n this.cache = services.cache;\n this.#entrypointRef = isFeatureEnabled(\n services.options.pluginOptions.features,\n 'useWeakRefInEval',\n entrypoint.name\n )\n ? new WeakRef(entrypoint)\n : entrypoint;\n this.idx = entrypoint.idx;\n this.id = entrypoint.name;\n this.filename = entrypoint.name;\n this.dependencies = [];\n this.debug = entrypoint.log.extend('module');\n this.parentIsIgnored = parentModule?.ignored ?? false;\n this.ignored = entrypoint.ignored ?? this.parentIsIgnored;\n\n if (parentModule) {\n this.callstack = [entrypoint.name, ...parentModule.callstack];\n } else {\n this.callstack = [entrypoint.name];\n }\n\n this.extensions = services.options.pluginOptions.extensions;\n\n this.debug('init', entrypoint.name);\n }\n\n public get exports() {\n return this.entrypoint.exports;\n }\n\n public set exports(value) {\n this.entrypoint.exports = value;\n\n this.debug('the whole exports was overridden with %O', value);\n }\n\n protected get entrypoint(): Entrypoint {\n const entrypoint =\n this.#entrypointRef instanceof WeakRef\n ? this.#entrypointRef.deref()\n : this.#entrypointRef;\n invariant(entrypoint, `Module ${this.idx} is disposed`);\n return entrypoint;\n }\n\n evaluate(): void {\n const { entrypoint } = this;\n entrypoint.assertTransformed();\n\n const cached = this.cache.get('entrypoints', entrypoint.name)!;\n let evaluatedCreated = false;\n if (!entrypoint.supersededWith) {\n this.cache.add(\n 'entrypoints',\n entrypoint.name,\n entrypoint.createEvaluated()\n );\n evaluatedCreated = true;\n }\n\n const { transformedCode: source } = entrypoint;\n const { pluginOptions } = this.services.options;\n\n if (!source) {\n this.debug(`evaluate`, 'there is nothing to evaluate');\n return;\n }\n\n if (this.isEvaluated) {\n this.debug('evaluate', `is already evaluated`);\n return;\n }\n\n this.debug('evaluate');\n this.debug.extend('source')('%s', source);\n\n this.isEvaluated = true;\n\n const filename = stripQueryAndHash(this.filename);\n\n if (/\\.json$/.test(filename)) {\n // For JSON files, parse it to a JS object similar to Node\n this.exports = JSON.parse(source);\n return;\n }\n\n const { context, teardown } = createVmContext(\n filename,\n pluginOptions.features,\n {\n module: this,\n exports: entrypoint.exports,\n require: this.require,\n __wyw_dynamic_import: async (id: unknown) => this.require(String(id)),\n __dirname: path.dirname(filename),\n },\n pluginOptions.overrideContext\n );\n\n try {\n const script = new vm.Script(\n `(function (exports) { ${source}\\n})(exports);`,\n {\n filename,\n }\n );\n\n script.runInContext(context);\n } catch (e) {\n this.isEvaluated = false;\n if (evaluatedCreated) {\n this.cache.add('entrypoints', entrypoint.name, cached);\n }\n\n if (isUnprocessedEntrypointError(e)) {\n // It will be handled by evalFile scenario\n throw e;\n }\n\n if (e instanceof EvalError) {\n this.debug('%O', e);\n\n throw e;\n }\n\n this.debug('%O\\n%O', e, this.callstack);\n const baseMessage = `${(e as Error).message} in${this.callstack.join(\n '\\n| '\n )}\\n`;\n const hint = getBrowserOnlyEvalHint(e);\n\n throw new EvalError(hint ? `${baseMessage}${hint}\\n` : baseMessage);\n } finally {\n teardown();\n }\n }\n\n getEntrypoint(\n filename: string,\n only: string[],\n log: Debugger\n ): Entrypoint | IEvaluatedEntrypoint | null {\n const strippedFilename = stripQueryAndHash(filename);\n const extension = path.extname(strippedFilename);\n if (extension !== '.json' && !this.extensions.includes(extension)) {\n return null;\n }\n\n let entrypoint = this.cache.get('entrypoints', filename);\n if (entrypoint && isSuperSet(entrypoint.evaluatedOnly ?? [], only)) {\n if (this.cache.checkFreshness(filename, strippedFilename)) {\n entrypoint = undefined;\n }\n\n if (entrypoint) {\n log('✅ file has been already evaluated');\n return entrypoint;\n }\n }\n\n if (entrypoint?.ignored) {\n log(\n '✅ file has been ignored during prepare stage. Original code will be used'\n );\n return entrypoint;\n }\n\n if (this.ignored) {\n log(\n '✅ one of the parent files has been ignored during prepare stage. Original code will be used'\n );\n\n const newEntrypoint = this.entrypoint.createChild(\n filename,\n ['*'],\n fs.readFileSync(strippedFilename, 'utf-8')\n );\n\n if (newEntrypoint === 'loop') {\n const stack = getStack(this.entrypoint);\n throw new Error(\n `Circular dependency detected: ${stack.join(' -> ')} -> ${filename}`\n );\n }\n\n return newEntrypoint;\n }\n\n let uncachedExports: string[] | null = null;\n let reprocessOnly: string[] = only;\n // Requested file can be already prepared for evaluation on the stage 1\n if (only && entrypoint) {\n const evaluatedExports =\n entrypoint.evaluatedOnly?.length !== 0\n ? entrypoint.evaluatedOnly\n : entrypoint.only ?? [];\n uncachedExports = getUncached(evaluatedExports, only);\n if (uncachedExports.length === 0) {\n log('✅ ready for evaluation');\n return entrypoint;\n }\n\n if (entrypoint.evaluatedOnly?.length) {\n reprocessOnly = mergeOnly(evaluatedExports, only);\n }\n\n log(\n '❌ file has been processed during prepare stage but %o is not evaluated yet (evaluated: %o)',\n uncachedExports,\n evaluatedExports\n );\n } else {\n log('❌ file has not been processed during prepare stage');\n }\n\n // If code wasn't extracted from cache, it indicates that we were unable\n // to process some of the imports on stage1. Let's try to reprocess.\n const code = fs.readFileSync(strippedFilename, 'utf-8');\n const newEntrypoint = Entrypoint.createRoot(\n this.services,\n filename,\n reprocessOnly,\n code\n );\n\n if (newEntrypoint.evaluated) {\n log('✅ file has been already evaluated');\n return newEntrypoint;\n }\n\n if (newEntrypoint.ignored) {\n log(\n '✅ file has been ignored during prepare stage. Original code will be used'\n );\n return newEntrypoint;\n }\n\n return newEntrypoint;\n }\n\n private resolveWithConditions(\n id: string,\n parent: { id: string; filename: string; paths: string[] },\n conditions?: Set<string>\n ): string {\n const resolveOptions = conditions ? { conditions } : undefined;\n const shouldRetryWithExtensions =\n conditions &&\n path.extname(id) === '' &&\n (id.startsWith('.') || path.isAbsolute(id) || isBarePackageSubpath(id));\n try {\n return this.moduleImpl._resolveFilename(\n id,\n parent,\n false,\n resolveOptions\n );\n } catch (e: unknown) {\n if (\n shouldRetryWithExtensions &&\n e instanceof Error &&\n (e as NodeJS.ErrnoException).code === 'MODULE_NOT_FOUND'\n ) {\n // Extensionless subpath requests (e.g. \"pkg/src/*\" or \"./src/*\") may\n // resolve to extensionless targets via conditional exports. Retry with\n // each known extension, but never rewrite already explicit specifiers.\n for (const ext of this.extensions) {\n try {\n return this.moduleImpl._resolveFilename(\n id + ext,\n parent,\n false,\n resolveOptions\n );\n } catch {\n // try next extension\n }\n }\n }\n throw e;\n }\n }\n\n resolveDependency = (id: string): IEntrypointDependency => {\n const cached = this.entrypoint.getDependency(id);\n invariant(!(cached instanceof Promise), 'Dependency is not resolved yet');\n\n if (cached) {\n return cached;\n }\n\n if (!this.ignored) {\n this.debug(\n '❌ import has not been resolved during prepare stage. Fallback to Node.js resolver'\n );\n }\n\n const extensions = this.moduleImpl._extensions;\n const added: string[] = [];\n\n try {\n // Check for supported extensions\n this.extensions.forEach((ext) => {\n if (ext in extensions) {\n return;\n }\n\n // When an extension is not supported, add it\n // And keep track of it to clean it up after resolving\n // Use noop for the transform function since we handle it\n extensions[ext] = NOOP;\n added.push(ext);\n });\n\n const { filename } = this;\n const strippedId = stripQueryAndHash(id);\n\n const parent = {\n id: filename,\n filename,\n paths: this.moduleImpl._nodeModulePaths(path.dirname(filename)),\n };\n const { conditionNames } = this.services.options.pluginOptions;\n const conditions = conditionNames?.length\n ? expandConditions(conditionNames)\n : undefined;\n\n let resolved = this.resolveWithConditions(strippedId, parent, conditions);\n\n const isFileSpecifier =\n strippedId.startsWith('.') || path.isAbsolute(strippedId);\n\n if (\n isFileSpecifier &&\n path.extname(strippedId) === '' &&\n resolved.endsWith('.cjs') &&\n fs.existsSync(`${resolved.slice(0, -4)}.js`)\n ) {\n // When both `.cjs` and `.js` exist for an extensionless specifier, the\n // resolver may pick `.cjs` depending on the environment/extensions.\n // Prefer `.js` to keep resolved paths stable (e.g. importOverrides keys).\n resolved = `${resolved.slice(0, -4)}.js`;\n }\n\n const { root } = this.services.options;\n const keyInfo = toImportKey({\n source: id,\n resolved,\n root,\n });\n\n const override = getImportOverride(\n this.services.options.pluginOptions.importOverrides,\n keyInfo.key\n );\n\n const policy = override?.unknown ?? (override?.mock ? 'allow' : 'warn');\n const shouldWarn = !this.ignored && policy === 'warn';\n\n let finalResolved = resolved;\n if (override?.mock) {\n try {\n finalResolved = resolveMockSpecifier({\n mock: override.mock,\n importer: filename,\n root,\n stack: this.callstack,\n });\n } catch (e) {\n const errorMessage = String((e as Error)?.message ?? e);\n throw new Error(\n `[wyw-in-js] Failed to resolve import mock for \"${keyInfo.key}\" (${id} from ${filename}): ${errorMessage}`\n );\n }\n }\n\n if (policy === 'error') {\n throw new Error(\n [\n `[wyw-in-js] Unknown import reached during eval (Node resolver fallback)`,\n ``,\n `importer: ${filename}`,\n `source: ${id}`,\n `resolved: ${resolved}`,\n override?.mock\n ? `mock: ${override.mock} -> ${finalResolved}`\n : ``,\n ``,\n `callstack:`,\n ...this.callstack.map((item) => ` ${item}`),\n ``,\n `config key: ${keyInfo.key}`,\n ]\n .filter(Boolean)\n .join('\\n')\n );\n }\n\n const warnedUnknownImports = getWarnedUnknownImports(this.services);\n\n if (shouldWarn && !warnedUnknownImports.has(keyInfo.key)) {\n warnedUnknownImports.add(keyInfo.key);\n emitWarning(\n this.services,\n [\n `[wyw-in-js] Unknown import reached during eval (Node resolver fallback)`,\n ``,\n `importer: ${filename}`,\n `source: ${id}`,\n `resolved: ${resolved}`,\n override?.mock\n ? `mock: ${override.mock} -> ${finalResolved}`\n : ``,\n ``,\n `callstack:`,\n ...this.callstack.map((item) => ` ${item}`),\n ``,\n `config key: ${keyInfo.key}`,\n `hint: add { importOverrides: { ${JSON.stringify(\n keyInfo.key\n )}: { unknown: 'allow' } } } to silence warnings, or use { mock } / { noShake: true } overrides.`,\n ]\n .filter(Boolean)\n .join('\\n')\n );\n }\n\n return {\n source: id,\n only: applyImportOverrideToOnly(['*'], override),\n resolved: finalResolved,\n };\n } finally {\n // Cleanup the extensions we added to restore previous behaviour\n added.forEach((ext) => delete extensions[ext]);\n }\n };\n\n protected createChild(entrypoint: Entrypoint): Module {\n return new Module(this.services, entrypoint, this, this.moduleImpl);\n }\n\n private loadByImportLoaders(\n request: string,\n resolved: string\n ): { handled: boolean; value: unknown } {\n const { pluginOptions } = this.services.options;\n const importLoaders =\n pluginOptions.importLoaders === undefined\n ? defaultImportLoaders\n : { ...defaultImportLoaders, ...pluginOptions.importLoaders };\n\n const { query, hash } = parseRequest(request);\n if (!query) return { handled: false, value: undefined };\n\n const params = new URLSearchParams(query);\n const matchedKey = Array.from(params.keys()).find(\n (key) => importLoaders[key] !== undefined && importLoaders[key] !== false\n );\n\n if (!matchedKey) return { handled: false, value: undefined };\n\n const loader = importLoaders[matchedKey];\n\n const filename = stripQueryAndHash(resolved);\n const importer = stripQueryAndHash(this.filename);\n const importerDir = path.dirname(importer);\n\n const toUrl = () => {\n const relative = path\n .relative(importerDir, filename)\n .replace(/\\\\/g, path.posix.sep);\n\n if (relative.startsWith('.') || path.isAbsolute(relative)) {\n return relative;\n }\n\n return `./${relative}`;\n };\n\n const readFile = () => fs.readFileSync(filename, 'utf-8');\n\n const context: ImportLoaderContext = {\n importer,\n request,\n resolved,\n filename,\n query,\n hash,\n emitWarning: (message) => emitWarning(this.services, message),\n readFile,\n toUrl,\n };\n\n if (loader === 'raw') {\n return { handled: true, value: context.readFile() };\n }\n\n if (loader === 'url') {\n return { handled: true, value: context.toUrl() };\n }\n\n if (typeof loader === 'function') {\n return { handled: true, value: loader(context) };\n }\n\n return { handled: false, value: undefined };\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -15,6 +15,7 @@ var _UnprocessedEntrypointError = require("./actions/UnprocessedEntrypointError"
|
|
|
15
15
|
var _parseRequest = require("../utils/parseRequest");
|
|
16
16
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
17
17
|
const EMPTY_FILE = '=== empty file ===';
|
|
18
|
+
const DEFAULT_ACTION_CONTEXT = Symbol('defaultActionContext');
|
|
18
19
|
function hasLoop(name, parent, processed = []) {
|
|
19
20
|
if (parent.name === name || processed.includes(parent.name)) {
|
|
20
21
|
return true;
|
|
@@ -195,17 +196,21 @@ class Entrypoint extends _BaseEntrypoint.BaseEntrypoint {
|
|
|
195
196
|
beginProcessing() {
|
|
196
197
|
this.#isProcessing = true;
|
|
197
198
|
}
|
|
198
|
-
createAction(actionType, data, abortSignal = null) {
|
|
199
|
+
createAction(actionType, data, abortSignal = null, actionContext = DEFAULT_ACTION_CONTEXT) {
|
|
199
200
|
var _cached$abortSignal;
|
|
200
201
|
if (!this.actionsCache.has(actionType)) {
|
|
201
202
|
this.actionsCache.set(actionType, new Map());
|
|
202
203
|
}
|
|
203
|
-
const
|
|
204
|
+
const contexts = this.actionsCache.get(actionType);
|
|
205
|
+
if (!contexts.has(actionContext)) {
|
|
206
|
+
contexts.set(actionContext, new Map());
|
|
207
|
+
}
|
|
208
|
+
const cache = contexts.get(actionContext);
|
|
204
209
|
const cached = cache.get(data);
|
|
205
210
|
if (cached && !((_cached$abortSignal = cached.abortSignal) !== null && _cached$abortSignal !== void 0 && _cached$abortSignal.aborted)) {
|
|
206
211
|
return cached;
|
|
207
212
|
}
|
|
208
|
-
const newAction = new _BaseAction.BaseAction(actionType, this.services, this, data, abortSignal);
|
|
213
|
+
const newAction = new _BaseAction.BaseAction(actionType, this.services, this, data, abortSignal, actionContext);
|
|
209
214
|
cache.set(data, newAction);
|
|
210
215
|
this.services.eventEmitter.entrypointEvent(this.seqId, {
|
|
211
216
|
type: 'actionCreated',
|