@vitest/mocker
Version:
Vitest module mocker implementation
524 lines • 69.7 kB
JavaScript
import { readFileSync } from 'node:fs';
import { pathToFileURL, fileURLToPath } from 'node:url';
import MagicString from 'magic-string';
import { walk } from 'estree-walker';
import module$1, { isBuiltin, createRequire } from 'node:module';
import { extname } from 'node:path';
import { f as filterOutComments } from './chunk-helpers.js';
const isNodeInPatternWeakSet = new WeakSet();
function setIsNodeInPattern(node) {
return isNodeInPatternWeakSet.add(node);
}
function isNodeInPattern(node) {
return isNodeInPatternWeakSet.has(node);
}
/**
* Same logic from \@vue/compiler-core & \@vue/compiler-sfc
* Except this is using acorn AST
*/
function esmWalker(root, { onIdentifier, onImportMeta, onDynamicImport, onCallExpression }) {
const parentStack = [];
const varKindStack = [];
const scopeMap = new WeakMap();
const identifiers = [];
const setScope = (node, name) => {
let scopeIds = scopeMap.get(node);
if (scopeIds && scopeIds.has(name)) {
return;
}
if (!scopeIds) {
scopeIds = new Set();
scopeMap.set(node, scopeIds);
}
scopeIds.add(name);
};
function isInScope(name, parents) {
return parents.some((node) => node && scopeMap.get(node)?.has(name));
}
function handlePattern(p, parentScope) {
if (p.type === "Identifier") {
setScope(parentScope, p.name);
} else if (p.type === "RestElement") {
handlePattern(p.argument, parentScope);
} else if (p.type === "ObjectPattern") {
p.properties.forEach((property) => {
if (property.type === "RestElement") {
setScope(parentScope, property.argument.name);
} else {
handlePattern(property.value, parentScope);
}
});
} else if (p.type === "ArrayPattern") {
p.elements.forEach((element) => {
if (element) {
handlePattern(element, parentScope);
}
});
} else if (p.type === "AssignmentPattern") {
handlePattern(p.left, parentScope);
} else {
setScope(parentScope, p.name);
}
}
walk(root, {
enter(node, parent) {
if (node.type === "ImportDeclaration") {
return this.skip();
}
// track parent stack, skip for "else-if"/"else" branches as acorn nests
// the ast within "if" nodes instead of flattening them
if (parent && !(parent.type === "IfStatement" && node === parent.alternate)) {
parentStack.unshift(parent);
}
// track variable declaration kind stack used by VariableDeclarator
if (node.type === "VariableDeclaration") {
varKindStack.unshift(node.kind);
}
if (node.type === "CallExpression") {
onCallExpression?.(node, parentStack);
}
if (node.type === "MetaProperty" && node.meta.name === "import") {
onImportMeta?.(node);
} else if (node.type === "ImportExpression") {
onDynamicImport?.(node);
}
if (node.type === "Identifier") {
if (!isInScope(node.name, parentStack) && isRefIdentifier(node, parent, parentStack)) {
// record the identifier, for DFS -> BFS
identifiers.push([node, parentStack.slice(0)]);
}
} else if (node.type === "ClassDeclaration" && node.id) {
// A class declaration name could shadow an import, so add its name to the parent scope
const parentScope = findParentScope(parentStack);
if (parentScope) {
setScope(parentScope, node.id.name);
}
} else if (node.type === "ClassExpression" && node.id) {
// A class expression name could shadow an import, so add its name to the scope
setScope(node, node.id.name);
} else if (isFunctionNode(node)) {
// If it is a function declaration, it could be shadowing an import
// Add its name to the scope so it won't get replaced
if (node.type === "FunctionDeclaration") {
const parentScope = findParentScope(parentStack);
if (parentScope) {
setScope(parentScope, node.id.name);
}
}
// walk function expressions and add its arguments to known identifiers
// so that we don't prefix them
node.params.forEach((p) => {
if (p.type === "ObjectPattern" || p.type === "ArrayPattern") {
handlePattern(p, node);
return;
}
walk(p.type === "AssignmentPattern" ? p.left : p, { enter(child, parent) {
// skip params default value of destructure
if (parent?.type === "AssignmentPattern" && parent?.right === child) {
return this.skip();
}
if (child.type !== "Identifier") {
return;
}
// do not record as scope variable if is a destructuring keyword
if (isStaticPropertyKey(child, parent)) {
return;
}
// do not record if this is a default value
// assignment of a destructuring variable
if (parent?.type === "TemplateLiteral" && parent?.expressions.includes(child) || parent?.type === "CallExpression" && parent?.callee === child) {
return;
}
setScope(node, child.name);
} });
});
} else if (node.type === "Property" && parent.type === "ObjectPattern") {
// mark property in destructuring pattern
setIsNodeInPattern(node);
} else if (node.type === "VariableDeclarator") {
const parentFunction = findParentScope(parentStack, varKindStack[0] === "var");
if (parentFunction) {
handlePattern(node.id, parentFunction);
}
} else if (node.type === "CatchClause" && node.param) {
handlePattern(node.param, node);
}
},
leave(node, parent) {
// untrack parent stack from above
if (parent && !(parent.type === "IfStatement" && node === parent.alternate)) {
parentStack.shift();
}
if (node.type === "VariableDeclaration") {
varKindStack.shift();
}
}
});
// emit the identifier events in BFS so the hoisted declarations
// can be captured correctly
identifiers.forEach(([node, stack]) => {
if (!isInScope(node.name, stack)) {
const parent = stack[0];
const hasBindingShortcut = isStaticProperty(parent) && parent.shorthand && (!isNodeInPattern(parent) || isInDestructuringAssignment(parent, parentStack));
const classDeclaration = parent.type === "ClassDeclaration" && node === parent.superClass;
const classExpression = parent.type === "ClassExpression" && node === parent.id;
onIdentifier?.(node, {
hasBindingShortcut,
classDeclaration,
classExpression
}, stack);
}
});
}
function isRefIdentifier(id, parent, parentStack) {
// declaration id
if (parent.type === "CatchClause" || (parent.type === "VariableDeclarator" || parent.type === "ClassDeclaration") && parent.id === id) {
return false;
}
if (isFunctionNode(parent)) {
// function declaration/expression id
if (parent.id === id) {
return false;
}
// params list
if (parent.params.includes(id)) {
return false;
}
}
// class method name
if (parent.type === "MethodDefinition" && !parent.computed) {
return false;
}
// class property
if (parent.type === "PropertyDefinition" && !parent.computed) {
// Default values can still reference identifiers
return id === parent.value;
}
// property key
if (isStaticPropertyKey(id, parent)) {
return false;
}
// object destructuring pattern
if (isNodeInPattern(parent) && parent.value === id) {
return false;
}
// non-assignment array destructuring pattern
if (parent.type === "ArrayPattern" && !isInDestructuringAssignment(parent, parentStack)) {
return false;
}
// member expression property
if (parent.type === "MemberExpression" && parent.property === id && !parent.computed) {
return false;
}
if (parent.type === "ExportSpecifier") {
return false;
}
// is a special keyword but parsed as identifier
if (id.name === "arguments") {
return false;
}
return true;
}
function isStaticProperty(node) {
return node && node.type === "Property" && !node.computed;
}
function isStaticPropertyKey(node, parent) {
return isStaticProperty(parent) && parent.key === node;
}
const functionNodeTypeRE = /Function(?:Expression|Declaration)$|Method$/;
function isFunctionNode(node) {
return functionNodeTypeRE.test(node.type);
}
const blockNodeTypeRE = /^BlockStatement$|^For(?:In|Of)?Statement$/;
function isBlock(node) {
return blockNodeTypeRE.test(node.type);
}
function findParentScope(parentStack, isVar = false) {
return parentStack.find(isVar ? isFunctionNode : isBlock);
}
function isInDestructuringAssignment(parent, parentStack) {
if (parent && (parent.type === "Property" || parent.type === "ArrayPattern")) {
return parentStack.some((i) => i.type === "AssignmentExpression");
}
return false;
}
function getArbitraryModuleIdentifier(node) {
return node.type === "Identifier" ? node.name : node.raw;
}
/* cjs-module-lexer 2.3.0 */
let A$1;const B$1=1===new Uint8Array(new Uint16Array([1]).buffer)[0],Q$1="undefined"!=typeof Buffer;function parse$1(g,C="@"){A$1||initSync();const G=g.length+1,D=(A$1.__heap_base.value||A$1.__heap_base)+4*G-A$1.memory.buffer.byteLength;D>0&&A$1.memory.grow(Math.ceil(D/65536));const H=A$1.sa(G);g.length>=64&&Q$1?Buffer.from(A$1.memory.buffer,H,2*(G-1)).write(g,"utf16le"):(B$1?w:I)(g,new Uint16Array(A$1.memory.buffer,H,G));const J=A$1.parseCJS(H,g.length,0,0,0);if(J){const B=new Error(`Parse error ${C}${A$1.e()}:${g.slice(0,A$1.e()).split("\n").length}:${A$1.e()-g.lastIndexOf("\n",A$1.e()-1)}`);throw Object.assign(B,{idx:A$1.e()}),5!==J&&6!==J&&7!==J||Object.assign(B,{code:"ERR_LEXER_ESM_SYNTAX"}),B}let c=new Set,o=new Set,S=new Set;for(;A$1.rre();){const B=E$1(g.slice(A$1.res(),A$1.ree()));B&&o.add(B);}for(;A$1.ru();)S.add(E$1(g.slice(A$1.us(),A$1.ue())));for(;A$1.re();){let B=E$1(g.slice(A$1.es(),A$1.ee()));void 0===B||S.has(B)||c.add(B);}return {exports:[...c],reexports:[...o]}}function E$1(A){if('"'!==A[0]&&"'"!==A[0])return A;try{const B=function(A){const B=A[0];if('"'===B)try{return JSON.parse(A)}catch{}else if("'"===B&&A.length>1&&"'"===A[A.length-1]&&-1===A.indexOf('"'))try{return JSON.parse('"'+A.slice(1,-1)+'"')}catch{}let Q="",E={v:1};for(;E.v<A.length;){const C=A[E.v];switch(C){case B:return Q;case "\\":++E.v,Q+=g(A,E);break;case "\r":case "\n":throw new SyntaxError;default:++E.v,Q+=C;}}throw new SyntaxError}(A);for(let A=0;A<B.length;A++){const Q=64512&B.charCodeAt(A);if(!(Q<55296)){if(55296!==Q)return;if(56320!=(64512&B.charCodeAt(++A)))return}}return B}catch{}}function g(A,B){if(B.v===A.length)throw new SyntaxError;const Q=A[B.v];switch(++B.v,Q){case "\r":"\n"===A[B.v]&&++B.v;case "\n":case "\u2028":case "\u2029":return "";case "r":return "\r";case "n":return "\n";case "t":return "\t";case "b":return "\b";case "f":return "\f";case "v":return "\v";case "x":return function(A,B){const Q=C$1(A[B.v]);++B.v;const E=C$1(A[B.v]);return ++B.v,String.fromCodePoint(16*Q+E)}(A,B);case "u":return function(A,B){let Q=0;if("{"===A[B.v]){++B.v;do{if(Q=16*Q+C$1(A[B.v]),Q>1114111)throw new SyntaxError;++B.v;}while("}"!==A[B.v]);++B.v;}else for(let E=0;E<4;++E)Q=16*Q+C$1(A[B.v]),++B.v;return String.fromCodePoint(Q)}(A,B);case "0":case "1":case "2":case "3":case "4":case "5":case "6":case "7":return function(A,B,Q){let E=A<="3"?2:1,g=+A;do{if((A=B[Q.v])<"0"||A>"7")break;g=8*g+ +A,++Q.v,--E;}while(E>0);return String.fromCodePoint(g)}(Q,A,B);default:return Q}}function C$1(A){if(A>="0"&&A<="9")return +A;if(A>="a"&&A<="f")return A.charCodeAt(0)-87;if(A>="A"&&A<="F")return A.charCodeAt(0)-55;throw new SyntaxError}function I(A,B){const Q=A.length;let E=0;for(;E<Q;){const Q=A.charCodeAt(E);B[E++]=(255&Q)<<8|Q>>>8;}}function w(A,B){const Q=A.length;let E=0;for(;E<Q;)B[E]=A.charCodeAt(E++);}function G(){const A="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DQNBvKABQbygASgCAEECajYCABAQQfIARw0DQbygASgCACIAQQJqQeUAQfQAQfUAQfIAQe4AEAZFDQNBvKABIABBDGo2AgAQEBpBvKABKAIAIgAgBSAHECINA0G8oAEgACAIQQF0ajYCABAQQdsARw0DQbygAUG8oAEoAgBBAmo2AgAQEBpBvKABKAIAIgAgAiAEECINA0G8oAEgACADQQF0ajYCABAQQd0ARw0DQbygAUG8oAEoAgBBAmo2AgAQECIAQTtGBH9BvKABQbygASgCAEECajYCABAQBSAAC0H9AEcNA0G8oAFBvKABKAIAQQJqNgIAEBAiAEEsRgR/QbygAUG8oAEoAgBBAmo2AgAQEAUgAAtB/QBHDQNBvKABQbygASgCAEECajYCABAQQSlHDQNBvKABQbygASgCAEECajYCABAQIgBBO0cNAQtBvKABQbygASgCAEECajYCABAQIQALIABB/QBHDQFBvKABQbygASgCAEECajYCABAQQSlHDQFBtKABKAIAIQJBgCAhAANAAkAgACACRwRAIAggAEEMaigCACAAQQhqKAIAIgNrQQF1Rw0BIAUgAyAHECINASAAKAIAIABBBGooAgBBoB8oAgARAQBBvKABIAE2AgALDAQLIABBEGohAAwACwALIAIgA0GkHygCABEBAAtBvKABIAE2AgALDA4LIAJBgBBHDQlBDBAKDBILQQgQCgwRC0GGwAAgAkEBazsBAAwMCyACQYAQRw0AQQwQCgwPC0GGwAAgAkEBaiIAOwEAQbCgASgCACACQQJ0akGMwAAoAgA2AgAgAEH//wNxQc+gAWpBuKABLQAAOgAAQbigAUEAOgAADAoLQQIQCkEADA4LQYbAACACQQFrIgE7AQBBiMAALwEAIgAgAkYEQEGEwABBhMAALwEAQQFrIgA7AQBBiMAAQaDgACgCACAAQf//A3FBAXRqLwEAOwEADAYLIABB//8DRiABQf//A3EgAE9yDQhBAxAKDAwLIAAQCwwHCwJAIAEvAQQiAEEqRwRAIABBL0cNARAMDAkLEA0MCAtBkMAAAn8CQAJAAn8CQEGMwAAoAgAiAC8BACIBQSlHIAFBKGtB//8DcUEHSXEgAUEhayIDQQVNQQBBASADdEExcRtyRQRAIAFBOmsiA0H//wNxQSVPQr+AgICgAiADrYhCAYNQcg0BC0EBDAELIAFB/QBHIAFB+wBrQf//A3FBBElxCwRAAkACQAJAIAFBK2sOBAEFAgAFCyAAQQJrLwEAQTBrQf//A3FBCkkNAwwECyAAQQJrLwEAQStGDQIMAwsgAEECay8BAEEtRg0BDAILAkAgAUH9AEcEQCABQS9GDQEgAUEpRw0CQQEhBAJAQbCgASgCACACQQJ0aigCACICQfcAQegAQekAQewAQeUAEBoNACACQeYAQe8AQfIAEBsNACACQekAQeYAEBMhBAsgBEUNAgwDCwJ/QQEhBQJAAkACQAJAAkACQEGwoAEoAgAgAkECdGooAgAiAy8BACIEQTtrDgQFBAQBAAsCQCAEQeUAaw4EAwQEAgALIARBKUYNBCAEQfkARw0DIANBAmtB5gBB6QBB7gBB4QBB7ABB7AAQHAwFCyADQQJrLwEAQT1GDAQLIANBAmtB4wBB4QBB9ABB4wAQFAwDCyADQQJrQeUAQewAQfMAEBsMAgtBACEFCyAFCw0CIAJB0KABai0AAEUNAQwCC0GQwAAtAAANAQsCf0EAIQICQAJAAkACQAJAAkACQAJAAkAgAC8BAEHkAGsOFAABAggICAgICAgDBAgIBQgGCAgHCAsCQAJAIABBAmsvAQBB6QBrDgQACQkBCQsgAEEEa0H2AEHvABATDAkLIABBBGtB+QBB6QBB5QAQGwwICwJAAkAgAEECay8BAEHzAGsOAgABCAsgAEEEay8BACIDQeEARwRAIANB7ABHDQggAEEGa0HlABAdDAkLIABBBmtB4wAQHQwICyAAQQRrQeQAQeUAQewAQeUAEBQMBwsgAEECay8BAEHvAEcNBSAAQQRrLwEAQeUARw0FIABBBmsvAQAiA0HwAEcEQCADQeMARw0GIABBCGtB6QBB7gBB8wBB9ABB4QBB7gAQHAwHCyAAQQhrQfQAQfkAEBMMBgtBASECIABBAmsiAEHpABAdDQQgAEHyAEHlAEH0AEH1AEHyABAaDAULIABBAmtB5AAQHQwECwJ/AkAgAEECayIDQQxrIgBBmB8oAgAiBEkNACAAQeQAQeUAQeIAQfUAQecAQecAQeUAEAdFDQBBASAAIARGDQEaIANBDmsvAQAQDiECCyACCwwDCyAAQQJrQeEAQfcAQeEAQekAEBQMAgsgAEECay8BACIDQe8ARwRAIANB5QBHDQEgAEEEa0HuABAdDAILIABBBGtB9ABB6ABB8gAQGyECCyACCyEAIAFFDQBBASAARQ0BGgsCQANAQcCgASgCACEDQbygASgCACEAA0AgAEECaiEBAkACQCAAIANPDQACQAJAAkAgAS8BACICQdsAaw4CAQIACyABIQAgAkEKaw4EAgQEAgMLQbygASABNgIAQbygASgCACEAQcCgASgCACECAkACQANAAkAgAEECaiEBIAAgAk8NAAJAAkAgAS8BACIDQdwAaw4CAQQACyABIQAgA0EKaw4EAQICAQILIABBBGohAAwBCwtBvKABIAE2AgBBChAKDAELQbygASABNgIACwwECyAAQQRqIQAMAgtBvKABIAE2AgBBCxAKDAMLIAJBL0cNAAsLQbygASABNgIAC0EACzoAAAwGC0GIwAAvAQBB/v8DRw0CQQQQCgwJC0GGwAAgAkEBajsBAEGwoAEoAgAgAkECdGpBjMAAKAIANgIADAQLQYbAAC8BABpBiMAALwEAGkHwHygCACEBDAYLQbygASgCACEAQcCgASgCACECAkACQANAAkAgACIBQQJqIQAgASACTw0AAkACQCAALwEAIgNB3ABrDgUBAwMDBAALIANBJEcNAiABLwEEQfsARw0CQbygASABQQRqNgIAAkBBhMAALwEAIgBBgBBHBEBBhsAALwEAQYAQRw0BC0EMEAoMBQtBhMAAIABBAWo7AQBBoOAAKAIAIABBAXRqQYjAAC8BADsBAEGIwABBhsAALwEAQQFqIgA7AQBBhsAAIAA7AQAMBAsgAUEEaiEADAELC0G8oAEgADYCAEEIEAoMAQtBvKABIAA2AgALDAILQZgfKAIAIQMDQAJAIAFBAmshACABLwEAIgJBIEcNACABIANLIAAhAQ0BCwsCQCACQT1HDQADQAJAIABBAmshASAALwEAQSBHDQAgACADSyABIQANAQsLIAFBAmohACABQQRqIQFBACEEA0ACQCAALwEAIgJBgPgDcUGAuANGBEAgAkH/B3EgAEECay8BAEH/B3FBCnRyQYCABGohAgsgAkUgACADTXINACACQdwARg0CIAIQEUUNACAAQX5BfCACQYCABEkbaiEAIAIQEiEEDAELCyAEQQFxRQ0AIAAvAQBBIEcNAEG0oAEoAgAiAkGwHygCAEYNACACIAE2AgwgAiAA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";return "undefined"!=typeof Buffer?Buffer.from(A,"base64"):Uint8Array.from(atob(A),A=>A.charCodeAt(0))}let D;function init$1(){return D||(D=(async()=>{const B=await WebAssembly.compile(G()),{exports:Q}=await WebAssembly.instantiate(B);A$1=Q;})())}function initSync(){if(A$1)return;const B=new WebAssembly.Module(G()),{exports:Q}=new WebAssembly.Instance(B);A$1=Q;}
/* es-module-lexer 2.3.2 */
(function(A){return A[A.Static=1]="Static",A[A.Dynamic=2]="Dynamic",A[A.ImportMeta=3]="ImportMeta",A[A.StaticSourcePhase=4]="StaticSourcePhase",A[A.DynamicSourcePhase=5]="DynamicSourcePhase",A[A.StaticDeferPhase=6]="StaticDeferPhase",A[A.DynamicDeferPhase=7]="DynamicDeferPhase",A})({});const A=1===new Uint8Array(new Uint16Array([1]).buffer)[0];function parse(C,g="@"){if(!E)return init.then(()=>parse(C,g));const I=C.length+1,w=(E.__heap_base.value||E.__heap_base)+4*I-E.memory.buffer.byteLength;w>0&&E.memory.grow(Math.ceil(w/65536));const D=E.sa(I-1);if("undefined"!=typeof Buffer?Buffer.from(E.memory.buffer,D,2*(I-1)).write(C,"utf16le"):(A?Q:B)(C,new Uint16Array(E.memory.buffer,D,I)),!E.parse())throw Object.assign(new Error(`Parse error ${g}:${C.slice(0,E.e()).split("\n").length}:${E.e()-C.lastIndexOf("\n",E.e()-1)}`),{idx:E.e()});const o=[],G=[];for(;E.ri();){const A=E.is(),B=E.ie(),Q=E.it(),g=E.ai(),I=E.id(),w=E.ss(),D=E.se();let G;E.ip()&&(G=i(C.slice(-1===I?A-1:A,-1===I?B+1:B)));let J=null;for(J=[],E.rsa();E.ra();){const A=E.aks(),B=E.ake(),Q=E.avs(),g=E.ave();J.push([s(C.slice(A,B)),s(C.slice(Q,g))]);}0===J.length&&(J=null),o.push({n:G,t:Q,s:A,e:B,ss:w,se:D,d:I,a:g,at:J});}for(;E.re();){const A=E.es(),B=E.ee(),Q=E.els(),g=E.ele(),I=Q<0?void 0:s(C.slice(Q,g)),w=s(C.slice(A,B));G.push({s:A,e:B,ls:Q,le:g,ss:E.ess(),n:w,ln:I});}function i(A){try{return (0,eval)(A)}catch(A){}}function s(A){if(!A)return A;const B=A[0];return ('"'===B||"'"===B)&&i(A)||A}return [o,G,!!E.f(),!!E.ms()]}function B(A,B){const Q=A.length;let E=0;for(;E<Q;){const Q=A.charCodeAt(E);B[E++]=(255&Q)<<8|Q>>>8;}}function Q(A,B){const Q=A.length;let E=0;for(;E<Q;)B[E]=A.charCodeAt(E++);}let E;const C=()=>{return A="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DQECQAJAIABBAmoiAC8BACIHQdwAaw4FAAICAgUBCyACQQRqIQAMAQsgB0EkRw0AIAIvAQRB+wBHDQALC0GYCiABQQJrNgIADwsgABAmQZgKKAIAIQALQZgKIABBAmoiADYCAAJAAkACQEEBECVBKWsOBAECAgACC0GYCkGYCigCAEECajYCAEEBECUaIAMgADYCBEGYCigCACEAIANBAToAGCADIAA2AhAMCAtBggogBTsBACADIAA2AgRBmAooAgAhACADQQE6ABggAyAAQQJqNgIMQYAKIAQ7AQAPC0GYCkGYCigCAEECazYCAA8LIAdFIABB+wBHckUEQEGYCigCACEAQYIKLwEADQZBnAooAgAhAQNAAkACQCAAIAFJBEBBARAlIgBBIkYgAEEnRnINASAAQf0ARw0CQZgKQZgKKAIAQQJqNgIAC0EBECUhAUGYCigCACEAIAFB5gBGBEAgAEECakGcCEEGEB8NBwtBmAogAEEIajYCAEEBECUiAEEiRyAAQSdHcQ0GIAYgAEEAEDkPCyAAECYLQZgKQZgKKAIAQQJqIgA2AgAMAAsACwJAAkAgAEEnaw4EAwEBAwALIABBIkYNAgtBmAooAgAhBAsgBCAJRw0AQZgKIARBAms2AgAPCyAAQSpHIAVxDQJBggovAQANAkGYCigCACEAQZwKKAIAIQIDQCAAIAJPDQEgAC8BACIBQSdHIAFBIkdxBEBBmAogAEECaiIANgIADAEFIAYgASADEDkPCwALAAsQMgsPC0GYCkGYCigCAEECazYCAA8LQZgKIABBAms2AgALQwEDf0GYCigCACEAQZwKKAIAIQIDQAJAIABBAmohASAAIAJPDQAgASEAIAEvAQBBCmsOBAABAQABCwtBmAogATYCAAtwAQR/QZgKKAIAQQJqIQFBnAooAgAhBAJAA0AgASICQQJqIQEgAiAETw0BIAEvAQAhAwJAIABFBEAgA0EqRg0BIANBCmsOBAMCAgMCCyADQSpHDQELIAIvAQRBL0cNAAsgAkEEaiEBC0GYCiABNgIACwsAIABBn4CABBA8C30BBH9BnAooAgAhA0GYCigCACEBA0ACQAJAAkAgAS8BACICQS9GBEAgAS8BAiIBQSpHBEAgAUEvRg0CQS8PCyAAECMMAgsgAARAIAIQJA0CDAMLIAIQLg0BDAILECIL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","undefined"!=typeof Buffer?Buffer.from(A,"base64"):Uint8Array.from(atob(A),A=>A.charCodeAt(0));var A;};const init=WebAssembly.compile(C()).then(WebAssembly.instantiate).then(({exports:A})=>{E=A;});
async function initSyntaxLexers() {
await Promise.all([init$1(), init]);
}
const isTransform = process.execArgv.includes("--experimental-transform-types") || process.env.NODE_OPTIONS?.includes("--experimental-transform-types");
function transformCode(code, filename) {
const ext = extname(filename.split("?")[0]);
const isTs = ext === ".ts" || ext === ".cts" || ext === ".mts";
if (!isTs) {
return code;
}
if (!module$1.stripTypeScriptTypes) {
throw new Error(`Cannot parse '${filename}' because "module.stripTypeScriptTypes" is not supported. Module mocking requires Node.js 22.15 or higher. This is NOT a bug of Vitest.`);
}
return module$1.stripTypeScriptTypes(code, { mode: isTransform ? "transform" : "strip" });
}
const cachedFileExports = new Map();
function collectModuleExports(filename, code, format, exports = []) {
if (format === "module") {
const [imports_, exports_] = parse(code, filename);
const fileExports = exports_.map((p) => p.n);
// cached before re-exports are parsed, so circular re-exports stop here
cachedFileExports.set(filename, fileExports);
imports_.forEach(({ ss: start, se: end, n: name }) => {
const substring = code.substring(start, end).replace(/ +/g, " ");
if (name && substring.startsWith("export *") && !substring.startsWith("export * as")) {
fileExports.push(...tryParseModule(name));
}
});
exports.push(...fileExports);
} else {
const { exports: exports_, reexports } = parse$1(code, filename);
const fileExports = [...exports_];
cachedFileExports.set(filename, fileExports);
reexports.forEach((name) => {
fileExports.push(...tryParseModule(name));
});
exports.push(...fileExports);
}
function tryParseModule(name) {
try {
return parseModule(name);
} catch (error) {
console.warn(`[module mocking] Failed to parse '${name}' imported from ${filename}:`, error);
return [];
}
}
let __require;
function getModuleRequire() {
return __require ??= createRequire(filename);
}
function parseModule(name) {
if (isBuiltin(name)) {
if (cachedFileExports.has(name)) {
const cachedExports = cachedFileExports.get(name);
return cachedExports;
}
const builtinModule = getBuiltinModule(name);
const builtinExports = Object.keys(builtinModule);
cachedFileExports.set(name, builtinExports);
return builtinExports;
}
const resolvedModuleUrl = format === "module" ? import.meta.resolve(name, pathToFileURL(filename).toString()) : getModuleRequire().resolve(name);
const resolvedModulePath = format === "commonjs" ? resolvedModuleUrl : fileURLToPath(resolvedModuleUrl);
if (cachedFileExports.has(resolvedModulePath)) {
return cachedFileExports.get(resolvedModulePath);
}
const ext = extname(resolvedModulePath);
if (ext === ".json") {
return ["default"];
}
const fileContent = readFileSync(resolvedModulePath, "utf-8");
const code = transformCode(fileContent, resolvedModulePath);
const resolvedModuleFormat = resolveModuleFormat(pathToFileURL(resolvedModulePath).toString(), code);
if (!resolvedModuleFormat) {
// can't do wasm, for example
console.warn(`Cannot process '${resolvedModulePath}' imported from ${filename} because of unknown file extension: ${ext}.`);
cachedFileExports.set(resolvedModulePath, []);
return [];
}
return collectModuleExports(resolvedModulePath, code, resolvedModuleFormat, exports);
}
return Array.from(new Set(exports));
}
function resolveModuleFormat(url, code) {
const ext = extname(url);
if (ext === ".cjs" || ext === ".cts") {
return "commonjs";
} else if (ext === ".mjs" || ext === ".mts") {
return "module";
} else if (ext === ".js" || ext === ".ts" || ext === "") {
if (!module$1.findPackageJSON) {
throw new Error(`Cannot parse the module format of '${url}' because "module.findPackageJSON" is not available. Upgrade to Node 22.14 to use this feature. This is NOT a bug of Vitest.`);
}
const pkgJsonPath = module$1.findPackageJSON(url);
const pkgJson = pkgJsonPath ? JSON.parse(readFileSync(pkgJsonPath, "utf-8")) : {};
if (pkgJson?.type === "module") {
return "module";
} else if (pkgJson?.type === "commonjs") {
return "commonjs";
} else {
// Ambiguous input! Check if it has ESM syntax. Node.js is much smarter here,
// but we don't need to run the code, so we can be more relaxed
if (hasESM(filterOutComments(code))) {
return "module";
} else {
return "commonjs";
}
}
}
return undefined;
}
let __globalRequire;
function getBuiltinModule(moduleId) {
__globalRequire ??= module$1.createRequire(import.meta.url);
return __globalRequire(moduleId);
}
const ESM_RE = /(?:[\s;]|^)(?:import[\s\w*,{}]*from|import\s*["'*{]|export\b\s*(?:[*{]|default|class|type|function|const|var|let|async function)|import\.meta\b)/m;
function hasESM(code) {
return ESM_RE.test(code);
}
// TODO: better source map replacement
function automockModule(code, mockType, parse, options = {}) {
const globalThisAccessor = options.globalThisAccessor || "\"__vitest_mocker__\"";
let ast;
try {
ast = parse(code);
} catch (cause) {
if (options.id) {
throw new Error(`failed to parse ${options.id}`, { cause });
}
throw cause;
}
const m = new MagicString(code);
const allSpecifiers = [];
const replacers = [];
let importIndex = 0;
for (const _node of ast.body) {
if (_node.type === "ExportAllDeclaration") {
const node = _node;
// TODO: pass it down in the browser mode
if (!options.id) {
throw new Error(`automocking files with \`export *\` is not supported because it cannot be easily statically analysed`);
}
const source = node.source.value;
if (typeof source !== "string") {
throw new TypeError(`unknown source type while automocking: ${source}`);
}
const moduleUrl = import.meta.resolve(source, pathToFileURL(options.id).toString());
const modulePath = fileURLToPath(moduleUrl);
const moduleContent = readFileSync(modulePath, "utf-8");
const transformedCode = transformCode(moduleContent, moduleUrl);
const moduleFormat = resolveModuleFormat(moduleUrl, transformedCode);
const moduleExports = collectModuleExports(modulePath, transformedCode, moduleFormat || "module");
replacers.push(() => {
const importNames = [];
moduleExports.forEach((exportName) => {
const isReexported = allSpecifiers.some(({ name, alias }) => name === exportName || alias === exportName);
if (!isReexported) {
importNames.push(exportName);
allSpecifiers.push({ name: exportName });
}
});
const importString = `import { ${importNames.join(", ")} } from '${source}';`;
m.overwrite(node.start, node.end, importString);
});
}
if (_node.type === "ExportNamedDeclaration") {
const node = _node;
const declaration = node.declaration;
function traversePattern(expression) {
// export const test = '1'
if (expression.type === "Identifier") {
allSpecifiers.push({ name: expression.name });
} else if (expression.type === "ArrayPattern") {
expression.elements.forEach((element) => {
if (!element) {
return;
}
traversePattern(element);
});
} else if (expression.type === "ObjectPattern") {
expression.properties.forEach((property) => {
// export const { ...rest } = {}
if (property.type === "RestElement") {
traversePattern(property);
} else if (property.type === "Property") {
traversePattern(property.value);
} else ;
});
} else if (expression.type === "RestElement") {
traversePattern(expression.argument);
} else if (expression.type === "AssignmentPattern") {
throw new Error(`AssignmentPattern is not supported. Please open a new bug report.`);
} else if (expression.type === "MemberExpression") {
throw new Error(`MemberExpression is not supported. Please open a new bug report.`);
} else ;
}
if (declaration) {
if (declaration.type === "FunctionDeclaration") {
allSpecifiers.push({ name: declaration.id.name });
} else if (declaration.type === "VariableDeclaration") {
declaration.declarations.forEach((declaration) => {
traversePattern(declaration.id);
});
} else if (declaration.type === "ClassDeclaration") {
allSpecifiers.push({ name: declaration.id.name });
} else ;
m.remove(node.start, declaration.start);
}
const specifiers = node.specifiers || [];
const source = node.source;
if (!source && specifiers.length) {
specifiers.forEach((specifier) => {
allSpecifiers.push({
alias: getArbitraryModuleIdentifier(specifier.exported),
name: getArbitraryModuleIdentifier(specifier.local)
});
});
m.remove(node.start, node.end);
} else if (source && specifiers.length) {
const importNames = [];
specifiers.forEach((specifier) => {
const importedName = `__vitest_imported_${importIndex++}__`;
importNames.push([getArbitraryModuleIdentifier(specifier.local), importedName]);
allSpecifiers.push({
name: importedName,
alias: getArbitraryModuleIdentifier(specifier.exported)
});
});
const importString = `import { ${importNames.map(([name, alias]) => `${name} as ${alias}`).join(", ")} } from '${source.value}'`;
m.overwrite(node.start, node.end, importString);
}
}
if (_node.type === "ExportDefaultDeclaration") {
const node = _node;
const declaration = node.declaration;
allSpecifiers.push({
name: "__vitest_default",
alias: "default"
});
m.overwrite(node.start, declaration.start, `const __vitest_default = `);
}
}
replacers.forEach((cb) => cb());
const moduleObject = `
const __vitest_current_es_module__ = {
__esModule: true,
${allSpecifiers.map(({ name }) => `["${name}"]: ${name},`).join("\n ")}
}
const __vitest_mocked_module__ = globalThis[${globalThisAccessor}].mockObject(__vitest_current_es_module__, "${mockType}")
`;
const assigning = allSpecifiers.map(({ name }, index) => {
return `const __vitest_mocked_${index}__ = __vitest_mocked_module__["${name}"]`;
}).join("\n");
const redeclarations = allSpecifiers.map(({ name, alias }, index) => {
return ` __vitest_mocked_${index}__ as ${alias || name},`;
}).join("\n");
const specifiersExports = `
export {
${redeclarations}
}
`;
m.append(moduleObject + assigning + specifiersExports);
return m;
}
export { automockModule as a, init as b, collectModuleExports as c, esmWalker as e, initSyntaxLexers as i, parse as p };