@wyw-in-js/transform 0.5.4 → 0.5.5
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/utils/traversalCache.js +0 -5
- package/esm/utils/traversalCache.js.map +1 -1
- package/esm/vm/createVmContext.js +17 -6
- package/esm/vm/createVmContext.js.map +1 -1
- package/lib/utils/traversalCache.js +1 -8
- package/lib/utils/traversalCache.js.map +1 -1
- package/lib/vm/createVmContext.js +17 -6
- package/lib/vm/createVmContext.js.map +1 -1
- package/package.json +8 -8
- package/types/utils/traversalCache.d.ts +0 -1
- package/types/utils/traversalCache.js +1 -10
- package/types/vm/createVmContext.js +16 -6
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import traverse from '@babel/traverse';
|
|
2
1
|
const caches = new WeakMap();
|
|
3
2
|
export const getTraversalCache = (path, name) => {
|
|
4
3
|
const programPath = path.find(p => p.isProgram());
|
|
@@ -14,10 +13,6 @@ export const getTraversalCache = (path, name) => {
|
|
|
14
13
|
}
|
|
15
14
|
return cache.get(name);
|
|
16
15
|
};
|
|
17
|
-
const traverseCache = traverse.cache;
|
|
18
|
-
export const clearBabelTraversalCache = () => {
|
|
19
|
-
traverseCache.clear();
|
|
20
|
-
};
|
|
21
16
|
export const invalidateTraversalCache = path => {
|
|
22
17
|
const programPath = path.find(p => p.isProgram());
|
|
23
18
|
if (!programPath) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"traversalCache.js","names":["
|
|
1
|
+
{"version":3,"file":"traversalCache.js","names":["caches","WeakMap","getTraversalCache","path","name","programPath","find","p","isProgram","Error","node","type","has","set","Map","cache","get","invalidateTraversalCache","delete"],"sources":["../../src/utils/traversalCache.ts"],"sourcesContent":["import type { NodePath } from '@babel/traverse';\nimport type { Node } from '@babel/types';\n\nconst caches = new WeakMap<\n NodePath,\n Map<string, WeakMap<NodePath | Node, unknown>>\n>();\n\nexport const getTraversalCache = <\n TValue,\n TKey extends NodePath | Node = NodePath,\n>(\n path: NodePath,\n name: string\n) => {\n const programPath = path.find((p) => p.isProgram());\n if (!programPath) {\n throw new Error(`Could not find program for ${path.node.type}`);\n }\n\n if (!caches.has(programPath)) {\n caches.set(programPath, new Map());\n }\n\n const cache = caches.get(programPath)!;\n if (!cache.has(name)) {\n cache.set(name, new WeakMap());\n }\n\n return cache.get(name) as WeakMap<TKey, TValue>;\n};\n\nexport const invalidateTraversalCache = (path: NodePath) => {\n const programPath = path.find((p) => p.isProgram());\n if (!programPath) {\n throw new Error(`Could not find program for ${path.node.type}`);\n }\n\n caches.delete(programPath);\n};\n"],"mappings":"AAGA,MAAMA,MAAM,GAAG,IAAIC,OAAO,CAGxB,CAAC;AAEH,OAAO,MAAMC,iBAAiB,GAAGA,CAI/BC,IAAc,EACdC,IAAY,KACT;EACH,MAAMC,WAAW,GAAGF,IAAI,CAACG,IAAI,CAAEC,CAAC,IAAKA,CAAC,CAACC,SAAS,CAAC,CAAC,CAAC;EACnD,IAAI,CAACH,WAAW,EAAE;IAChB,MAAM,IAAII,KAAK,CAAE,8BAA6BN,IAAI,CAACO,IAAI,CAACC,IAAK,EAAC,CAAC;EACjE;EAEA,IAAI,CAACX,MAAM,CAACY,GAAG,CAACP,WAAW,CAAC,EAAE;IAC5BL,MAAM,CAACa,GAAG,CAACR,WAAW,EAAE,IAAIS,GAAG,CAAC,CAAC,CAAC;EACpC;EAEA,MAAMC,KAAK,GAAGf,MAAM,CAACgB,GAAG,CAACX,WAAW,CAAE;EACtC,IAAI,CAACU,KAAK,CAACH,GAAG,CAACR,IAAI,CAAC,EAAE;IACpBW,KAAK,CAACF,GAAG,CAACT,IAAI,EAAE,IAAIH,OAAO,CAAC,CAAC,CAAC;EAChC;EAEA,OAAOc,KAAK,CAACC,GAAG,CAACZ,IAAI,CAAC;AACxB,CAAC;AAED,OAAO,MAAMa,wBAAwB,GAAId,IAAc,IAAK;EAC1D,MAAME,WAAW,GAAGF,IAAI,CAACG,IAAI,CAAEC,CAAC,IAAKA,CAAC,CAACC,SAAS,CAAC,CAAC,CAAC;EACnD,IAAI,CAACH,WAAW,EAAE;IAChB,MAAM,IAAII,KAAK,CAAE,8BAA6BN,IAAI,CAACO,IAAI,CAACC,IAAK,EAAC,CAAC;EACjE;EAEAX,MAAM,CAACkB,MAAM,CAACb,WAAW,CAAC;AAC5B,CAAC"}
|
|
@@ -15,14 +15,25 @@ function createWindow() {
|
|
|
15
15
|
win.Uint8Array = Uint8Array;
|
|
16
16
|
return win;
|
|
17
17
|
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* `happy-dom` already has required references, so we don't need to set them.
|
|
21
|
+
*/
|
|
22
|
+
function setReferencePropertyIfNotPresent(context, key) {
|
|
23
|
+
if (context[key] === context) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
context[key] = context;
|
|
27
|
+
}
|
|
18
28
|
function createBaseContext(win, additionalContext) {
|
|
19
29
|
const baseContext = win ?? {};
|
|
30
|
+
setReferencePropertyIfNotPresent(baseContext, 'window');
|
|
31
|
+
setReferencePropertyIfNotPresent(baseContext, 'self');
|
|
32
|
+
setReferencePropertyIfNotPresent(baseContext, 'top');
|
|
33
|
+
setReferencePropertyIfNotPresent(baseContext, 'parent');
|
|
34
|
+
setReferencePropertyIfNotPresent(baseContext, 'global');
|
|
35
|
+
setReferencePropertyIfNotPresent(baseContext, 'process');
|
|
20
36
|
baseContext.document = win?.document;
|
|
21
|
-
baseContext.window = win;
|
|
22
|
-
baseContext.self = win;
|
|
23
|
-
baseContext.top = win;
|
|
24
|
-
baseContext.parent = win;
|
|
25
|
-
baseContext.global = win;
|
|
26
37
|
baseContext.process = process;
|
|
27
38
|
baseContext.clearImmediate = NOOP;
|
|
28
39
|
baseContext.clearInterval = NOOP;
|
|
@@ -42,7 +53,7 @@ function createHappyDOMWindow() {
|
|
|
42
53
|
const win = createWindow();
|
|
43
54
|
return {
|
|
44
55
|
teardown: () => {
|
|
45
|
-
win.happyDOM.
|
|
56
|
+
win.happyDOM.abort();
|
|
46
57
|
},
|
|
47
58
|
window: win
|
|
48
59
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createVmContext.js","names":["vm","isFeatureEnabled","process","NOOP","createWindow","Window","GlobalWindow","require","HappyWindow","win","Buffer","Uint8Array","
|
|
1
|
+
{"version":3,"file":"createVmContext.js","names":["vm","isFeatureEnabled","process","NOOP","createWindow","Window","GlobalWindow","require","HappyWindow","win","Buffer","Uint8Array","setReferencePropertyIfNotPresent","context","key","createBaseContext","additionalContext","baseContext","document","clearImmediate","clearInterval","clearTimeout","setImmediate","requestAnimationFrame","setInterval","setTimeout","createHappyDOMWindow","teardown","happyDOM","abort","window","createNothing","undefined","createVmContext","filename","features","overrideContext","i","isHappyDOMEnabled","__filename","createContext"],"sources":["../../src/vm/createVmContext.ts"],"sourcesContent":["import * as vm from 'vm';\n\nimport type { Window } from 'happy-dom';\n\nimport type { FeatureFlags, StrictOptions } from '@wyw-in-js/shared';\nimport { isFeatureEnabled } from '@wyw-in-js/shared';\n\nimport * as process from './process';\n\nconst NOOP = () => {};\n\nfunction createWindow(): Window {\n const { Window, GlobalWindow } = require('happy-dom');\n const HappyWindow = GlobalWindow || Window;\n const win = new HappyWindow();\n\n // TODO: browser doesn't expose Buffer, but a lot of dependencies use it\n win.Buffer = Buffer;\n win.Uint8Array = Uint8Array;\n\n return win;\n}\n\n/**\n * `happy-dom` already has required references, so we don't need to set them.\n */\nfunction setReferencePropertyIfNotPresent(\n context: vm.Context,\n key: string\n): void {\n if (context[key] === context) {\n return;\n }\n\n context[key] = context;\n}\n\nfunction createBaseContext(\n win: Window | undefined,\n additionalContext: Partial<vm.Context>\n): Partial<vm.Context> {\n const baseContext: vm.Context = win ?? {};\n\n setReferencePropertyIfNotPresent(baseContext, 'window');\n setReferencePropertyIfNotPresent(baseContext, 'self');\n setReferencePropertyIfNotPresent(baseContext, 'top');\n setReferencePropertyIfNotPresent(baseContext, 'parent');\n setReferencePropertyIfNotPresent(baseContext, 'global');\n setReferencePropertyIfNotPresent(baseContext, 'process');\n\n baseContext.document = win?.document;\n baseContext.process = process;\n\n baseContext.clearImmediate = NOOP;\n baseContext.clearInterval = NOOP;\n baseContext.clearTimeout = NOOP;\n baseContext.setImmediate = NOOP;\n baseContext.requestAnimationFrame = NOOP;\n baseContext.setInterval = NOOP;\n baseContext.setTimeout = NOOP;\n\n // eslint-disable-next-line guard-for-in,no-restricted-syntax\n for (const key in additionalContext) {\n baseContext[key] = additionalContext[key];\n }\n\n return baseContext;\n}\n\nfunction createHappyDOMWindow() {\n const win = createWindow();\n\n return {\n teardown: () => {\n win.happyDOM.abort();\n },\n window: win,\n };\n}\n\nfunction createNothing() {\n return {\n teardown: () => {},\n window: undefined,\n };\n}\n\nexport function createVmContext(\n filename: string,\n features: FeatureFlags<'happyDOM'>,\n additionalContext: Partial<vm.Context>,\n overrideContext: StrictOptions['overrideContext'] = (i) => i\n) {\n const isHappyDOMEnabled = isFeatureEnabled(features, 'happyDOM', filename);\n\n const { teardown, window } = isHappyDOMEnabled\n ? createHappyDOMWindow()\n : createNothing();\n const baseContext = createBaseContext(\n window,\n overrideContext(\n {\n __filename: filename,\n ...additionalContext,\n },\n filename\n )\n );\n\n const context = vm.createContext(baseContext);\n\n return {\n context,\n teardown,\n };\n}\n"],"mappings":"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"}
|
|
@@ -3,9 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.invalidateTraversalCache = exports.getTraversalCache =
|
|
7
|
-
var _traverse = _interopRequireDefault(require("@babel/traverse"));
|
|
8
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
6
|
+
exports.invalidateTraversalCache = exports.getTraversalCache = void 0;
|
|
9
7
|
const caches = new WeakMap();
|
|
10
8
|
const getTraversalCache = (path, name) => {
|
|
11
9
|
const programPath = path.find(p => p.isProgram());
|
|
@@ -22,11 +20,6 @@ const getTraversalCache = (path, name) => {
|
|
|
22
20
|
return cache.get(name);
|
|
23
21
|
};
|
|
24
22
|
exports.getTraversalCache = getTraversalCache;
|
|
25
|
-
const traverseCache = _traverse.default.cache;
|
|
26
|
-
const clearBabelTraversalCache = () => {
|
|
27
|
-
traverseCache.clear();
|
|
28
|
-
};
|
|
29
|
-
exports.clearBabelTraversalCache = clearBabelTraversalCache;
|
|
30
23
|
const invalidateTraversalCache = path => {
|
|
31
24
|
const programPath = path.find(p => p.isProgram());
|
|
32
25
|
if (!programPath) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"traversalCache.js","names":["
|
|
1
|
+
{"version":3,"file":"traversalCache.js","names":["caches","WeakMap","getTraversalCache","path","name","programPath","find","p","isProgram","Error","node","type","has","set","Map","cache","get","exports","invalidateTraversalCache","delete"],"sources":["../../src/utils/traversalCache.ts"],"sourcesContent":["import type { NodePath } from '@babel/traverse';\nimport type { Node } from '@babel/types';\n\nconst caches = new WeakMap<\n NodePath,\n Map<string, WeakMap<NodePath | Node, unknown>>\n>();\n\nexport const getTraversalCache = <\n TValue,\n TKey extends NodePath | Node = NodePath,\n>(\n path: NodePath,\n name: string\n) => {\n const programPath = path.find((p) => p.isProgram());\n if (!programPath) {\n throw new Error(`Could not find program for ${path.node.type}`);\n }\n\n if (!caches.has(programPath)) {\n caches.set(programPath, new Map());\n }\n\n const cache = caches.get(programPath)!;\n if (!cache.has(name)) {\n cache.set(name, new WeakMap());\n }\n\n return cache.get(name) as WeakMap<TKey, TValue>;\n};\n\nexport const invalidateTraversalCache = (path: NodePath) => {\n const programPath = path.find((p) => p.isProgram());\n if (!programPath) {\n throw new Error(`Could not find program for ${path.node.type}`);\n }\n\n caches.delete(programPath);\n};\n"],"mappings":";;;;;;AAGA,MAAMA,MAAM,GAAG,IAAIC,OAAO,CAGxB,CAAC;AAEI,MAAMC,iBAAiB,GAAGA,CAI/BC,IAAc,EACdC,IAAY,KACT;EACH,MAAMC,WAAW,GAAGF,IAAI,CAACG,IAAI,CAAEC,CAAC,IAAKA,CAAC,CAACC,SAAS,CAAC,CAAC,CAAC;EACnD,IAAI,CAACH,WAAW,EAAE;IAChB,MAAM,IAAII,KAAK,CAAE,8BAA6BN,IAAI,CAACO,IAAI,CAACC,IAAK,EAAC,CAAC;EACjE;EAEA,IAAI,CAACX,MAAM,CAACY,GAAG,CAACP,WAAW,CAAC,EAAE;IAC5BL,MAAM,CAACa,GAAG,CAACR,WAAW,EAAE,IAAIS,GAAG,CAAC,CAAC,CAAC;EACpC;EAEA,MAAMC,KAAK,GAAGf,MAAM,CAACgB,GAAG,CAACX,WAAW,CAAE;EACtC,IAAI,CAACU,KAAK,CAACH,GAAG,CAACR,IAAI,CAAC,EAAE;IACpBW,KAAK,CAACF,GAAG,CAACT,IAAI,EAAE,IAAIH,OAAO,CAAC,CAAC,CAAC;EAChC;EAEA,OAAOc,KAAK,CAACC,GAAG,CAACZ,IAAI,CAAC;AACxB,CAAC;AAACa,OAAA,CAAAf,iBAAA,GAAAA,iBAAA;AAEK,MAAMgB,wBAAwB,GAAIf,IAAc,IAAK;EAC1D,MAAME,WAAW,GAAGF,IAAI,CAACG,IAAI,CAAEC,CAAC,IAAKA,CAAC,CAACC,SAAS,CAAC,CAAC,CAAC;EACnD,IAAI,CAACH,WAAW,EAAE;IAChB,MAAM,IAAII,KAAK,CAAE,8BAA6BN,IAAI,CAACO,IAAI,CAACC,IAAK,EAAC,CAAC;EACjE;EAEAX,MAAM,CAACmB,MAAM,CAACd,WAAW,CAAC;AAC5B,CAAC;AAACY,OAAA,CAAAC,wBAAA,GAAAA,wBAAA"}
|
|
@@ -23,14 +23,25 @@ function createWindow() {
|
|
|
23
23
|
win.Uint8Array = Uint8Array;
|
|
24
24
|
return win;
|
|
25
25
|
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* `happy-dom` already has required references, so we don't need to set them.
|
|
29
|
+
*/
|
|
30
|
+
function setReferencePropertyIfNotPresent(context, key) {
|
|
31
|
+
if (context[key] === context) {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
context[key] = context;
|
|
35
|
+
}
|
|
26
36
|
function createBaseContext(win, additionalContext) {
|
|
27
37
|
const baseContext = win !== null && win !== void 0 ? win : {};
|
|
38
|
+
setReferencePropertyIfNotPresent(baseContext, 'window');
|
|
39
|
+
setReferencePropertyIfNotPresent(baseContext, 'self');
|
|
40
|
+
setReferencePropertyIfNotPresent(baseContext, 'top');
|
|
41
|
+
setReferencePropertyIfNotPresent(baseContext, 'parent');
|
|
42
|
+
setReferencePropertyIfNotPresent(baseContext, 'global');
|
|
43
|
+
setReferencePropertyIfNotPresent(baseContext, 'process');
|
|
28
44
|
baseContext.document = win === null || win === void 0 ? void 0 : win.document;
|
|
29
|
-
baseContext.window = win;
|
|
30
|
-
baseContext.self = win;
|
|
31
|
-
baseContext.top = win;
|
|
32
|
-
baseContext.parent = win;
|
|
33
|
-
baseContext.global = win;
|
|
34
45
|
baseContext.process = process;
|
|
35
46
|
baseContext.clearImmediate = NOOP;
|
|
36
47
|
baseContext.clearInterval = NOOP;
|
|
@@ -50,7 +61,7 @@ function createHappyDOMWindow() {
|
|
|
50
61
|
const win = createWindow();
|
|
51
62
|
return {
|
|
52
63
|
teardown: () => {
|
|
53
|
-
win.happyDOM.
|
|
64
|
+
win.happyDOM.abort();
|
|
54
65
|
},
|
|
55
66
|
window: win
|
|
56
67
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createVmContext.js","names":["vm","_interopRequireWildcard","require","_shared","process","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","NOOP","createWindow","Window","GlobalWindow","HappyWindow","win","Buffer","Uint8Array","
|
|
1
|
+
{"version":3,"file":"createVmContext.js","names":["vm","_interopRequireWildcard","require","_shared","process","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","NOOP","createWindow","Window","GlobalWindow","HappyWindow","win","Buffer","Uint8Array","setReferencePropertyIfNotPresent","context","key","createBaseContext","additionalContext","baseContext","document","clearImmediate","clearInterval","clearTimeout","setImmediate","requestAnimationFrame","setInterval","setTimeout","createHappyDOMWindow","teardown","happyDOM","abort","window","createNothing","undefined","createVmContext","filename","features","overrideContext","isHappyDOMEnabled","isFeatureEnabled","__filename","createContext"],"sources":["../../src/vm/createVmContext.ts"],"sourcesContent":["import * as vm from 'vm';\n\nimport type { Window } from 'happy-dom';\n\nimport type { FeatureFlags, StrictOptions } from '@wyw-in-js/shared';\nimport { isFeatureEnabled } from '@wyw-in-js/shared';\n\nimport * as process from './process';\n\nconst NOOP = () => {};\n\nfunction createWindow(): Window {\n const { Window, GlobalWindow } = require('happy-dom');\n const HappyWindow = GlobalWindow || Window;\n const win = new HappyWindow();\n\n // TODO: browser doesn't expose Buffer, but a lot of dependencies use it\n win.Buffer = Buffer;\n win.Uint8Array = Uint8Array;\n\n return win;\n}\n\n/**\n * `happy-dom` already has required references, so we don't need to set them.\n */\nfunction setReferencePropertyIfNotPresent(\n context: vm.Context,\n key: string\n): void {\n if (context[key] === context) {\n return;\n }\n\n context[key] = context;\n}\n\nfunction createBaseContext(\n win: Window | undefined,\n additionalContext: Partial<vm.Context>\n): Partial<vm.Context> {\n const baseContext: vm.Context = win ?? {};\n\n setReferencePropertyIfNotPresent(baseContext, 'window');\n setReferencePropertyIfNotPresent(baseContext, 'self');\n setReferencePropertyIfNotPresent(baseContext, 'top');\n setReferencePropertyIfNotPresent(baseContext, 'parent');\n setReferencePropertyIfNotPresent(baseContext, 'global');\n setReferencePropertyIfNotPresent(baseContext, 'process');\n\n baseContext.document = win?.document;\n baseContext.process = process;\n\n baseContext.clearImmediate = NOOP;\n baseContext.clearInterval = NOOP;\n baseContext.clearTimeout = NOOP;\n baseContext.setImmediate = NOOP;\n baseContext.requestAnimationFrame = NOOP;\n baseContext.setInterval = NOOP;\n baseContext.setTimeout = NOOP;\n\n // eslint-disable-next-line guard-for-in,no-restricted-syntax\n for (const key in additionalContext) {\n baseContext[key] = additionalContext[key];\n }\n\n return baseContext;\n}\n\nfunction createHappyDOMWindow() {\n const win = createWindow();\n\n return {\n teardown: () => {\n win.happyDOM.abort();\n },\n window: win,\n };\n}\n\nfunction createNothing() {\n return {\n teardown: () => {},\n window: undefined,\n };\n}\n\nexport function createVmContext(\n filename: string,\n features: FeatureFlags<'happyDOM'>,\n additionalContext: Partial<vm.Context>,\n overrideContext: StrictOptions['overrideContext'] = (i) => i\n) {\n const isHappyDOMEnabled = isFeatureEnabled(features, 'happyDOM', filename);\n\n const { teardown, window } = isHappyDOMEnabled\n ? createHappyDOMWindow()\n : createNothing();\n const baseContext = createBaseContext(\n window,\n overrideContext(\n {\n __filename: filename,\n ...additionalContext,\n },\n filename\n )\n );\n\n const context = vm.createContext(baseContext);\n\n return {\n context,\n teardown,\n };\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wyw-in-js/transform",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.5",
|
|
4
4
|
"dependencies": {
|
|
5
5
|
"@babel/core": "^7.23.5",
|
|
6
6
|
"@babel/generator": "^7.23.5",
|
|
@@ -11,12 +11,12 @@
|
|
|
11
11
|
"@babel/types": "^7.23.5",
|
|
12
12
|
"babel-merge": "^3.0.0",
|
|
13
13
|
"cosmiconfig": "^8.0.0",
|
|
14
|
-
"happy-dom": "^
|
|
14
|
+
"happy-dom": "^15.11.0",
|
|
15
15
|
"source-map": "^0.7.4",
|
|
16
16
|
"stylis": "^4.3.0",
|
|
17
17
|
"ts-invariant": "^0.10.3",
|
|
18
|
-
"@wyw-in-js/processor-utils": "0.5.
|
|
19
|
-
"@wyw-in-js/shared": "0.5.
|
|
18
|
+
"@wyw-in-js/processor-utils": "0.5.5",
|
|
19
|
+
"@wyw-in-js/shared": "0.5.5"
|
|
20
20
|
},
|
|
21
21
|
"devDependencies": {
|
|
22
22
|
"@babel/plugin-syntax-typescript": "^7.23.3",
|
|
@@ -37,10 +37,10 @@
|
|
|
37
37
|
"glob": "^10.3.10",
|
|
38
38
|
"strip-ansi": "^5.2.0",
|
|
39
39
|
"typescript": "^5.2.2",
|
|
40
|
-
"@wyw-in-js/babel-config": "0.5.
|
|
41
|
-
"@wyw-in-js/eslint-config": "0.5.
|
|
42
|
-
"@wyw-in-js/jest-preset": "0.5.
|
|
43
|
-
"@wyw-in-js/ts-config": "0.5.
|
|
40
|
+
"@wyw-in-js/babel-config": "0.5.5",
|
|
41
|
+
"@wyw-in-js/eslint-config": "0.5.5",
|
|
42
|
+
"@wyw-in-js/jest-preset": "0.5.5",
|
|
43
|
+
"@wyw-in-js/ts-config": "0.5.5"
|
|
44
44
|
},
|
|
45
45
|
"engines": {
|
|
46
46
|
"node": ">=16.0.0"
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import type { NodePath } from '@babel/traverse';
|
|
2
2
|
import type { Node } from '@babel/types';
|
|
3
3
|
export declare const getTraversalCache: <TValue, TKey extends Node | NodePath<Node> = NodePath<Node>>(path: NodePath, name: string) => WeakMap<TKey, TValue>;
|
|
4
|
-
export declare const clearBabelTraversalCache: () => void;
|
|
5
4
|
export declare const invalidateTraversalCache: (path: NodePath) => void;
|
|
@@ -1,10 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.invalidateTraversalCache = exports.
|
|
7
|
-
const traverse_1 = __importDefault(require("@babel/traverse"));
|
|
3
|
+
exports.invalidateTraversalCache = exports.getTraversalCache = void 0;
|
|
8
4
|
const caches = new WeakMap();
|
|
9
5
|
const getTraversalCache = (path, name) => {
|
|
10
6
|
const programPath = path.find((p) => p.isProgram());
|
|
@@ -21,11 +17,6 @@ const getTraversalCache = (path, name) => {
|
|
|
21
17
|
return cache.get(name);
|
|
22
18
|
};
|
|
23
19
|
exports.getTraversalCache = getTraversalCache;
|
|
24
|
-
const traverseCache = traverse_1.default.cache;
|
|
25
|
-
const clearBabelTraversalCache = () => {
|
|
26
|
-
traverseCache.clear();
|
|
27
|
-
};
|
|
28
|
-
exports.clearBabelTraversalCache = clearBabelTraversalCache;
|
|
29
20
|
const invalidateTraversalCache = (path) => {
|
|
30
21
|
const programPath = path.find((p) => p.isProgram());
|
|
31
22
|
if (!programPath) {
|
|
@@ -37,14 +37,24 @@ function createWindow() {
|
|
|
37
37
|
win.Uint8Array = Uint8Array;
|
|
38
38
|
return win;
|
|
39
39
|
}
|
|
40
|
+
/**
|
|
41
|
+
* `happy-dom` already has required references, so we don't need to set them.
|
|
42
|
+
*/
|
|
43
|
+
function setReferencePropertyIfNotPresent(context, key) {
|
|
44
|
+
if (context[key] === context) {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
context[key] = context;
|
|
48
|
+
}
|
|
40
49
|
function createBaseContext(win, additionalContext) {
|
|
41
50
|
const baseContext = win ?? {};
|
|
51
|
+
setReferencePropertyIfNotPresent(baseContext, 'window');
|
|
52
|
+
setReferencePropertyIfNotPresent(baseContext, 'self');
|
|
53
|
+
setReferencePropertyIfNotPresent(baseContext, 'top');
|
|
54
|
+
setReferencePropertyIfNotPresent(baseContext, 'parent');
|
|
55
|
+
setReferencePropertyIfNotPresent(baseContext, 'global');
|
|
56
|
+
setReferencePropertyIfNotPresent(baseContext, 'process');
|
|
42
57
|
baseContext.document = win?.document;
|
|
43
|
-
baseContext.window = win;
|
|
44
|
-
baseContext.self = win;
|
|
45
|
-
baseContext.top = win;
|
|
46
|
-
baseContext.parent = win;
|
|
47
|
-
baseContext.global = win;
|
|
48
58
|
baseContext.process = process;
|
|
49
59
|
baseContext.clearImmediate = NOOP;
|
|
50
60
|
baseContext.clearInterval = NOOP;
|
|
@@ -63,7 +73,7 @@ function createHappyDOMWindow() {
|
|
|
63
73
|
const win = createWindow();
|
|
64
74
|
return {
|
|
65
75
|
teardown: () => {
|
|
66
|
-
win.happyDOM.
|
|
76
|
+
win.happyDOM.abort();
|
|
67
77
|
},
|
|
68
78
|
window: win,
|
|
69
79
|
};
|