@next-core/runtime 1.48.0 → 1.49.0
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/dist/cjs/StoryboardFunctionRegistry.js +34 -9
- package/dist/cjs/StoryboardFunctionRegistry.js.map +1 -1
- package/dist/esm/StoryboardFunctionRegistry.js +34 -9
- package/dist/esm/StoryboardFunctionRegistry.js.map +1 -1
- package/dist/types/StoryboardFunctionRegistry.d.ts +13 -2
- package/package.json +5 -5
|
@@ -26,9 +26,15 @@ var _getGeneralGlobals = require("./internal/compute/getGeneralGlobals.js");
|
|
|
26
26
|
function StoryboardFunctionRegistryFactory({
|
|
27
27
|
widgetId,
|
|
28
28
|
widgetVersion,
|
|
29
|
-
collectCoverage
|
|
29
|
+
collectCoverage,
|
|
30
|
+
debuggerOverrides
|
|
30
31
|
} = {}) {
|
|
31
32
|
const registeredFunctions = new Map();
|
|
33
|
+
const overrides = debuggerOverrides === null || debuggerOverrides === void 0 ? void 0 : debuggerOverrides({
|
|
34
|
+
precookFunction: _cook.precookFunction,
|
|
35
|
+
cook: _cook.cook,
|
|
36
|
+
supply: _supply.supply
|
|
37
|
+
});
|
|
32
38
|
|
|
33
39
|
// Use `Proxy` with a frozen target, to make a readonly function registry.
|
|
34
40
|
const storyboardFunctions = new Proxy(Object.freeze({}), {
|
|
@@ -73,18 +79,37 @@ function StoryboardFunctionRegistryFactory({
|
|
|
73
79
|
beforeVisit: collector.beforeVisit
|
|
74
80
|
}
|
|
75
81
|
});
|
|
82
|
+
const globalVariables = (0, _supply.supply)(precooked.attemptToVisitGlobals, (0, _getGeneralGlobals.getGeneralGlobals)(precooked.attemptToVisitGlobals, {
|
|
83
|
+
collectCoverage,
|
|
84
|
+
widgetId,
|
|
85
|
+
widgetVersion,
|
|
86
|
+
app: currentApp,
|
|
87
|
+
storyboardFunctions,
|
|
88
|
+
isStoryboardFunction: true
|
|
89
|
+
}), !!collectCoverage);
|
|
76
90
|
fn.cooked = (0, _cook.cook)(precooked.function, fn.source, {
|
|
77
91
|
rules: {
|
|
78
92
|
noVar: true
|
|
79
93
|
},
|
|
80
|
-
globalVariables:
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
94
|
+
globalVariables: overrides ? {
|
|
95
|
+
...globalVariables,
|
|
96
|
+
...(overrides !== null && overrides !== void 0 && overrides.LodashWithStaticFields && precooked.attemptToVisitGlobals.has("_") ? {
|
|
97
|
+
_: {
|
|
98
|
+
...globalVariables._,
|
|
99
|
+
...overrides.LodashWithStaticFields
|
|
100
|
+
}
|
|
101
|
+
} : null),
|
|
102
|
+
...(overrides !== null && overrides !== void 0 && overrides.ArrayConstructor && precooked.attemptToVisitGlobals.has("Array") ? {
|
|
103
|
+
Array: overrides.ArrayConstructor
|
|
104
|
+
} : null),
|
|
105
|
+
...(overrides !== null && overrides !== void 0 && overrides.ObjectWithStaticFields && precooked.attemptToVisitGlobals.has("Object") ? {
|
|
106
|
+
Object: {
|
|
107
|
+
...globalVariables.Object,
|
|
108
|
+
...overrides.ObjectWithStaticFields
|
|
109
|
+
}
|
|
110
|
+
} : null)
|
|
111
|
+
} : globalVariables,
|
|
112
|
+
ArrayConstructor: overrides === null || overrides === void 0 ? void 0 : overrides.ArrayConstructor,
|
|
88
113
|
hooks: collector && {
|
|
89
114
|
beforeEvaluate: collector.beforeEvaluate,
|
|
90
115
|
beforeCall: collector.beforeCall,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StoryboardFunctionRegistry.js","names":["_cook","require","_supply","_storyboard","_getGeneralGlobals","StoryboardFunctionRegistryFactory","widgetId","widgetVersion","collectCoverage","registeredFunctions","Map","storyboardFunctions","Proxy","Object","freeze","get","_target","key","getStoryboardFunction","currentApp","registerStoryboardFunctions","functions","app","clear","Array","isArray","fn","deps","collectMemberUsageInFunction","hasPermissionsCheck","has","set","name","source","typescript","undefined","processed","cooked","collector","createCollector","precooked","precookFunction","hooks","beforeVisit","cook","function","rules","noVar","globalVariables","supply","attemptToVisitGlobals","getGeneralGlobals","isStoryboardFunction","beforeEvaluate","beforeCall","beforeBranch","debug","updateStoryboardFunction","data","newFn","checkPermissionsUsage","functionNames","checkedFunctions","Set","add","some"],"sources":["../../src/StoryboardFunctionRegistry.ts"],"sourcesContent":["import type { MicroApp, StoryboardFunction } from \"@next-core/types\";\nimport { cook, precookFunction, EstreeNode } from \"@next-core/cook\";\nimport { supply } from \"@next-core/supply\";\nimport { collectMemberUsageInFunction } from \"@next-core/utils/storyboard\";\nimport { getGeneralGlobals } from \"./internal/compute/getGeneralGlobals.js\";\n\n/** @internal */\nexport type ReadonlyStoryboardFunctions = Readonly<Record<string, Function>>;\n\n/** @internal */\nexport type StoryboardFunctionPatch = Pick<\n StoryboardFunction,\n \"source\" | \"typescript\"\n>;\n\n/** @internal */\nexport interface StoryboardFunctionRegistry {\n /** A readonly proxy for accessing cooked storyboard functions. */\n storyboardFunctions: ReadonlyStoryboardFunctions;\n\n /** Register storyboard functions. */\n registerStoryboardFunctions(\n functions: StoryboardFunction[] | undefined,\n app?: PartialMicroApp\n ): void;\n\n /** Update a storyboard function during debugging. */\n updateStoryboardFunction(name: string, data: StoryboardFunctionPatch): void;\n\n checkPermissionsUsage(functionNames: string[]): boolean;\n}\n\n/** @internal */\nexport interface RuntimeStoryboardFunction {\n source: string;\n typescript?: boolean;\n processed?: boolean;\n cooked?: Function;\n deps: Set<string>;\n hasPermissionsCheck: boolean;\n}\n\n/** @internal */\nexport interface FunctionCoverageCollector {\n beforeVisit(node: EstreeNode): void;\n beforeEvaluate(node: EstreeNode): void;\n beforeCall(node: EstreeNode): void;\n beforeBranch(node: EstreeNode, branch: string): void;\n}\n\n/** @internal */\nexport interface FunctionCoverageSettings {\n createCollector(name: string): FunctionCoverageCollector;\n}\n\n/** @internal */\nexport type PartialMicroApp = Pick<MicroApp, \"id\" | \"isBuildPush\">;\n\n/** @internal */\nexport function StoryboardFunctionRegistryFactory({\n widgetId,\n widgetVersion,\n collectCoverage,\n}: {\n widgetId?: string;\n widgetVersion?: string;\n collectCoverage?: FunctionCoverageSettings;\n} = {}): StoryboardFunctionRegistry {\n const registeredFunctions = new Map<string, RuntimeStoryboardFunction>();\n\n // Use `Proxy` with a frozen target, to make a readonly function registry.\n const storyboardFunctions = new Proxy(Object.freeze({}), {\n get(_target, key) {\n return getStoryboardFunction(key as string);\n },\n }) as ReadonlyStoryboardFunctions;\n\n let currentApp: PartialMicroApp | undefined;\n\n function registerStoryboardFunctions(\n functions: StoryboardFunction[],\n app?: PartialMicroApp\n ): void {\n if (app) {\n currentApp = app;\n }\n registeredFunctions.clear();\n if (Array.isArray(functions)) {\n for (const fn of functions) {\n const deps = collectMemberUsageInFunction(fn, \"FN\", !!collectCoverage);\n const hasPermissionsCheck = collectMemberUsageInFunction(\n fn,\n \"PERMISSIONS\",\n !!collectCoverage\n ).has(\"check\");\n registeredFunctions.set(fn.name, {\n source: fn.source,\n typescript: fn.typescript,\n deps,\n hasPermissionsCheck,\n });\n }\n }\n }\n\n function getStoryboardFunction(name: string): Function | undefined {\n const fn = registeredFunctions.get(name);\n if (!fn) {\n return undefined;\n }\n if (fn.processed) {\n return fn.cooked;\n }\n let collector: FunctionCoverageCollector | undefined;\n if (collectCoverage) {\n collector = collectCoverage.createCollector(name);\n }\n const precooked = precookFunction(fn.source, {\n typescript: fn.typescript,\n hooks: collector && {\n beforeVisit: collector.beforeVisit,\n },\n });\n fn.cooked = cook(precooked.function, fn.source, {\n rules: {\n noVar: true,\n },\n globalVariables: supply(\n precooked.attemptToVisitGlobals,\n getGeneralGlobals(precooked.attemptToVisitGlobals, {\n collectCoverage,\n widgetId,\n widgetVersion,\n app: currentApp,\n storyboardFunctions,\n isStoryboardFunction: true,\n }),\n !!collectCoverage\n ),\n hooks: collector && {\n beforeEvaluate: collector.beforeEvaluate,\n beforeCall: collector.beforeCall,\n beforeBranch: collector.beforeBranch,\n },\n debug: true,\n }) as Function;\n fn.processed = true;\n return fn.cooked;\n }\n\n return {\n storyboardFunctions,\n registerStoryboardFunctions,\n updateStoryboardFunction(\n name: string,\n data: StoryboardFunctionPatch\n ): void {\n const newFn = {\n ...data,\n name,\n };\n const deps = collectMemberUsageInFunction(newFn, \"FN\", true);\n const hasPermissionsCheck = collectMemberUsageInFunction(\n newFn,\n \"PERMISSIONS\",\n true\n ).has(\"check\");\n registeredFunctions.set(name, {\n source: data.source,\n typescript: data.typescript,\n deps,\n hasPermissionsCheck,\n });\n },\n /**\n * Check whether listed functions attempt to call `PERMISSIONS.check()`,\n * includes in nested `FN.*()` calls.\n */\n checkPermissionsUsage(functionNames) {\n const checkedFunctions = new Set<string>();\n const hasPermissionsCheck = (name: string): boolean => {\n if (!checkedFunctions.has(name)) {\n checkedFunctions.add(name);\n const fn = registeredFunctions.get(name);\n return (\n !!fn &&\n (fn.hasPermissionsCheck || [...fn.deps].some(hasPermissionsCheck))\n );\n }\n return false;\n };\n return functionNames.some(hasPermissionsCheck);\n },\n };\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"StoryboardFunctionRegistry.js","names":["_cook","require","_supply","_storyboard","_getGeneralGlobals","StoryboardFunctionRegistryFactory","widgetId","widgetVersion","collectCoverage","debuggerOverrides","registeredFunctions","Map","overrides","precookFunction","cook","supply","storyboardFunctions","Proxy","Object","freeze","get","_target","key","getStoryboardFunction","currentApp","registerStoryboardFunctions","functions","app","clear","Array","isArray","fn","deps","collectMemberUsageInFunction","hasPermissionsCheck","has","set","name","source","typescript","undefined","processed","cooked","collector","createCollector","precooked","hooks","beforeVisit","globalVariables","attemptToVisitGlobals","getGeneralGlobals","isStoryboardFunction","function","rules","noVar","LodashWithStaticFields","_","ArrayConstructor","ObjectWithStaticFields","beforeEvaluate","beforeCall","beforeBranch","debug","updateStoryboardFunction","data","newFn","checkPermissionsUsage","functionNames","checkedFunctions","Set","add","some"],"sources":["../../src/StoryboardFunctionRegistry.ts"],"sourcesContent":["import type { MicroApp, StoryboardFunction } from \"@next-core/types\";\nimport { cook, precookFunction, EstreeNode } from \"@next-core/cook\";\nimport { supply } from \"@next-core/supply\";\nimport { collectMemberUsageInFunction } from \"@next-core/utils/storyboard\";\nimport type _ from \"lodash\";\nimport { getGeneralGlobals } from \"./internal/compute/getGeneralGlobals.js\";\n\n/** @internal */\nexport type ReadonlyStoryboardFunctions = Readonly<Record<string, Function>>;\n\n/** @internal */\nexport type StoryboardFunctionPatch = Pick<\n StoryboardFunction,\n \"source\" | \"typescript\"\n>;\n\n/** @internal */\nexport interface StoryboardFunctionRegistry {\n /** A readonly proxy for accessing cooked storyboard functions. */\n storyboardFunctions: ReadonlyStoryboardFunctions;\n\n /** Register storyboard functions. */\n registerStoryboardFunctions(\n functions: StoryboardFunction[] | undefined,\n app?: PartialMicroApp\n ): void;\n\n /** Update a storyboard function during debugging. */\n updateStoryboardFunction(name: string, data: StoryboardFunctionPatch): void;\n\n checkPermissionsUsage(functionNames: string[]): boolean;\n}\n\n/** @internal */\nexport interface RuntimeStoryboardFunction {\n source: string;\n typescript?: boolean;\n processed?: boolean;\n cooked?: Function;\n deps: Set<string>;\n hasPermissionsCheck: boolean;\n}\n\n/** @internal */\nexport interface FunctionCoverageCollector {\n beforeVisit(node: EstreeNode): void;\n beforeEvaluate(node: EstreeNode): void;\n beforeCall(node: EstreeNode): void;\n beforeBranch(node: EstreeNode, branch: string): void;\n}\n\n/** @internal */\nexport interface FunctionCoverageSettings {\n createCollector(name: string): FunctionCoverageCollector;\n}\n\n/** @internal */\nexport type PartialMicroApp = Pick<MicroApp, \"id\" | \"isBuildPush\">;\n\n/** @internal */\nexport function StoryboardFunctionRegistryFactory({\n widgetId,\n widgetVersion,\n collectCoverage,\n debuggerOverrides,\n}: {\n widgetId?: string;\n widgetVersion?: string;\n collectCoverage?: FunctionCoverageSettings;\n debuggerOverrides?: (ctx: {\n precookFunction: typeof precookFunction;\n cook: typeof cook;\n supply: typeof supply;\n }) => {\n LodashWithStaticFields?: Partial<typeof _>;\n ArrayConstructor?: typeof Array;\n ObjectWithStaticFields?: Partial<typeof Object>;\n };\n} = {}): StoryboardFunctionRegistry {\n const registeredFunctions = new Map<string, RuntimeStoryboardFunction>();\n\n const overrides = debuggerOverrides?.({\n precookFunction,\n cook,\n supply,\n });\n\n // Use `Proxy` with a frozen target, to make a readonly function registry.\n const storyboardFunctions = new Proxy(Object.freeze({}), {\n get(_target, key) {\n return getStoryboardFunction(key as string);\n },\n }) as ReadonlyStoryboardFunctions;\n\n let currentApp: PartialMicroApp | undefined;\n\n function registerStoryboardFunctions(\n functions: StoryboardFunction[],\n app?: PartialMicroApp\n ): void {\n if (app) {\n currentApp = app;\n }\n registeredFunctions.clear();\n if (Array.isArray(functions)) {\n for (const fn of functions) {\n const deps = collectMemberUsageInFunction(fn, \"FN\", !!collectCoverage);\n const hasPermissionsCheck = collectMemberUsageInFunction(\n fn,\n \"PERMISSIONS\",\n !!collectCoverage\n ).has(\"check\");\n registeredFunctions.set(fn.name, {\n source: fn.source,\n typescript: fn.typescript,\n deps,\n hasPermissionsCheck,\n });\n }\n }\n }\n\n function getStoryboardFunction(name: string): Function | undefined {\n const fn = registeredFunctions.get(name);\n if (!fn) {\n return undefined;\n }\n if (fn.processed) {\n return fn.cooked;\n }\n let collector: FunctionCoverageCollector | undefined;\n if (collectCoverage) {\n collector = collectCoverage.createCollector(name);\n }\n const precooked = precookFunction(fn.source, {\n typescript: fn.typescript,\n hooks: collector && {\n beforeVisit: collector.beforeVisit,\n },\n });\n const globalVariables = supply(\n precooked.attemptToVisitGlobals,\n getGeneralGlobals(precooked.attemptToVisitGlobals, {\n collectCoverage,\n widgetId,\n widgetVersion,\n app: currentApp,\n storyboardFunctions,\n isStoryboardFunction: true,\n }),\n !!collectCoverage\n );\n\n fn.cooked = cook(precooked.function, fn.source, {\n rules: {\n noVar: true,\n },\n globalVariables: overrides\n ? {\n ...globalVariables,\n ...(overrides?.LodashWithStaticFields &&\n precooked.attemptToVisitGlobals.has(\"_\")\n ? {\n _: {\n ...(globalVariables._ as typeof _),\n ...overrides.LodashWithStaticFields,\n },\n }\n : null),\n ...(overrides?.ArrayConstructor &&\n precooked.attemptToVisitGlobals.has(\"Array\")\n ? {\n Array: overrides.ArrayConstructor,\n }\n : null),\n ...(overrides?.ObjectWithStaticFields &&\n precooked.attemptToVisitGlobals.has(\"Object\")\n ? {\n Object: {\n ...(globalVariables.Object as typeof Object),\n ...overrides.ObjectWithStaticFields,\n },\n }\n : null),\n }\n : globalVariables,\n ArrayConstructor: overrides?.ArrayConstructor,\n hooks: collector && {\n beforeEvaluate: collector.beforeEvaluate,\n beforeCall: collector.beforeCall,\n beforeBranch: collector.beforeBranch,\n },\n debug: true,\n }) as Function;\n fn.processed = true;\n return fn.cooked;\n }\n\n return {\n storyboardFunctions,\n registerStoryboardFunctions,\n updateStoryboardFunction(\n name: string,\n data: StoryboardFunctionPatch\n ): void {\n const newFn = {\n ...data,\n name,\n };\n const deps = collectMemberUsageInFunction(newFn, \"FN\", true);\n const hasPermissionsCheck = collectMemberUsageInFunction(\n newFn,\n \"PERMISSIONS\",\n true\n ).has(\"check\");\n registeredFunctions.set(name, {\n source: data.source,\n typescript: data.typescript,\n deps,\n hasPermissionsCheck,\n });\n },\n /**\n * Check whether listed functions attempt to call `PERMISSIONS.check()`,\n * includes in nested `FN.*()` calls.\n */\n checkPermissionsUsage(functionNames) {\n const checkedFunctions = new Set<string>();\n const hasPermissionsCheck = (name: string): boolean => {\n if (!checkedFunctions.has(name)) {\n checkedFunctions.add(name);\n const fn = registeredFunctions.get(name);\n return (\n !!fn &&\n (fn.hasPermissionsCheck || [...fn.deps].some(hasPermissionsCheck))\n );\n }\n return false;\n };\n return functionNames.some(hasPermissionsCheck);\n },\n };\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -22,9 +22,15 @@ export function StoryboardFunctionRegistryFactory() {
|
|
|
22
22
|
let {
|
|
23
23
|
widgetId,
|
|
24
24
|
widgetVersion,
|
|
25
|
-
collectCoverage
|
|
25
|
+
collectCoverage,
|
|
26
|
+
debuggerOverrides
|
|
26
27
|
} = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
27
28
|
const registeredFunctions = new Map();
|
|
29
|
+
const overrides = debuggerOverrides === null || debuggerOverrides === void 0 ? void 0 : debuggerOverrides({
|
|
30
|
+
precookFunction,
|
|
31
|
+
cook,
|
|
32
|
+
supply
|
|
33
|
+
});
|
|
28
34
|
|
|
29
35
|
// Use `Proxy` with a frozen target, to make a readonly function registry.
|
|
30
36
|
const storyboardFunctions = new Proxy(Object.freeze({}), {
|
|
@@ -69,18 +75,37 @@ export function StoryboardFunctionRegistryFactory() {
|
|
|
69
75
|
beforeVisit: collector.beforeVisit
|
|
70
76
|
}
|
|
71
77
|
});
|
|
78
|
+
const globalVariables = supply(precooked.attemptToVisitGlobals, getGeneralGlobals(precooked.attemptToVisitGlobals, {
|
|
79
|
+
collectCoverage,
|
|
80
|
+
widgetId,
|
|
81
|
+
widgetVersion,
|
|
82
|
+
app: currentApp,
|
|
83
|
+
storyboardFunctions,
|
|
84
|
+
isStoryboardFunction: true
|
|
85
|
+
}), !!collectCoverage);
|
|
72
86
|
fn.cooked = cook(precooked.function, fn.source, {
|
|
73
87
|
rules: {
|
|
74
88
|
noVar: true
|
|
75
89
|
},
|
|
76
|
-
globalVariables:
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
90
|
+
globalVariables: overrides ? {
|
|
91
|
+
...globalVariables,
|
|
92
|
+
...(overrides !== null && overrides !== void 0 && overrides.LodashWithStaticFields && precooked.attemptToVisitGlobals.has("_") ? {
|
|
93
|
+
_: {
|
|
94
|
+
...globalVariables._,
|
|
95
|
+
...overrides.LodashWithStaticFields
|
|
96
|
+
}
|
|
97
|
+
} : null),
|
|
98
|
+
...(overrides !== null && overrides !== void 0 && overrides.ArrayConstructor && precooked.attemptToVisitGlobals.has("Array") ? {
|
|
99
|
+
Array: overrides.ArrayConstructor
|
|
100
|
+
} : null),
|
|
101
|
+
...(overrides !== null && overrides !== void 0 && overrides.ObjectWithStaticFields && precooked.attemptToVisitGlobals.has("Object") ? {
|
|
102
|
+
Object: {
|
|
103
|
+
...globalVariables.Object,
|
|
104
|
+
...overrides.ObjectWithStaticFields
|
|
105
|
+
}
|
|
106
|
+
} : null)
|
|
107
|
+
} : globalVariables,
|
|
108
|
+
ArrayConstructor: overrides === null || overrides === void 0 ? void 0 : overrides.ArrayConstructor,
|
|
84
109
|
hooks: collector && {
|
|
85
110
|
beforeEvaluate: collector.beforeEvaluate,
|
|
86
111
|
beforeCall: collector.beforeCall,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StoryboardFunctionRegistry.js","names":["cook","precookFunction","supply","collectMemberUsageInFunction","getGeneralGlobals","StoryboardFunctionRegistryFactory","widgetId","widgetVersion","collectCoverage","arguments","length","undefined","registeredFunctions","Map","storyboardFunctions","Proxy","Object","freeze","get","_target","key","getStoryboardFunction","currentApp","registerStoryboardFunctions","functions","app","clear","Array","isArray","fn","deps","hasPermissionsCheck","has","set","name","source","typescript","processed","cooked","collector","createCollector","precooked","hooks","beforeVisit","function","rules","noVar","globalVariables","attemptToVisitGlobals","isStoryboardFunction","beforeEvaluate","beforeCall","beforeBranch","debug","updateStoryboardFunction","data","newFn","checkPermissionsUsage","functionNames","checkedFunctions","Set","add","some"],"sources":["../../src/StoryboardFunctionRegistry.ts"],"sourcesContent":["import type { MicroApp, StoryboardFunction } from \"@next-core/types\";\nimport { cook, precookFunction, EstreeNode } from \"@next-core/cook\";\nimport { supply } from \"@next-core/supply\";\nimport { collectMemberUsageInFunction } from \"@next-core/utils/storyboard\";\nimport { getGeneralGlobals } from \"./internal/compute/getGeneralGlobals.js\";\n\n/** @internal */\nexport type ReadonlyStoryboardFunctions = Readonly<Record<string, Function>>;\n\n/** @internal */\nexport type StoryboardFunctionPatch = Pick<\n StoryboardFunction,\n \"source\" | \"typescript\"\n>;\n\n/** @internal */\nexport interface StoryboardFunctionRegistry {\n /** A readonly proxy for accessing cooked storyboard functions. */\n storyboardFunctions: ReadonlyStoryboardFunctions;\n\n /** Register storyboard functions. */\n registerStoryboardFunctions(\n functions: StoryboardFunction[] | undefined,\n app?: PartialMicroApp\n ): void;\n\n /** Update a storyboard function during debugging. */\n updateStoryboardFunction(name: string, data: StoryboardFunctionPatch): void;\n\n checkPermissionsUsage(functionNames: string[]): boolean;\n}\n\n/** @internal */\nexport interface RuntimeStoryboardFunction {\n source: string;\n typescript?: boolean;\n processed?: boolean;\n cooked?: Function;\n deps: Set<string>;\n hasPermissionsCheck: boolean;\n}\n\n/** @internal */\nexport interface FunctionCoverageCollector {\n beforeVisit(node: EstreeNode): void;\n beforeEvaluate(node: EstreeNode): void;\n beforeCall(node: EstreeNode): void;\n beforeBranch(node: EstreeNode, branch: string): void;\n}\n\n/** @internal */\nexport interface FunctionCoverageSettings {\n createCollector(name: string): FunctionCoverageCollector;\n}\n\n/** @internal */\nexport type PartialMicroApp = Pick<MicroApp, \"id\" | \"isBuildPush\">;\n\n/** @internal */\nexport function StoryboardFunctionRegistryFactory({\n widgetId,\n widgetVersion,\n collectCoverage,\n}: {\n widgetId?: string;\n widgetVersion?: string;\n collectCoverage?: FunctionCoverageSettings;\n} = {}): StoryboardFunctionRegistry {\n const registeredFunctions = new Map<string, RuntimeStoryboardFunction>();\n\n // Use `Proxy` with a frozen target, to make a readonly function registry.\n const storyboardFunctions = new Proxy(Object.freeze({}), {\n get(_target, key) {\n return getStoryboardFunction(key as string);\n },\n }) as ReadonlyStoryboardFunctions;\n\n let currentApp: PartialMicroApp | undefined;\n\n function registerStoryboardFunctions(\n functions: StoryboardFunction[],\n app?: PartialMicroApp\n ): void {\n if (app) {\n currentApp = app;\n }\n registeredFunctions.clear();\n if (Array.isArray(functions)) {\n for (const fn of functions) {\n const deps = collectMemberUsageInFunction(fn, \"FN\", !!collectCoverage);\n const hasPermissionsCheck = collectMemberUsageInFunction(\n fn,\n \"PERMISSIONS\",\n !!collectCoverage\n ).has(\"check\");\n registeredFunctions.set(fn.name, {\n source: fn.source,\n typescript: fn.typescript,\n deps,\n hasPermissionsCheck,\n });\n }\n }\n }\n\n function getStoryboardFunction(name: string): Function | undefined {\n const fn = registeredFunctions.get(name);\n if (!fn) {\n return undefined;\n }\n if (fn.processed) {\n return fn.cooked;\n }\n let collector: FunctionCoverageCollector | undefined;\n if (collectCoverage) {\n collector = collectCoverage.createCollector(name);\n }\n const precooked = precookFunction(fn.source, {\n typescript: fn.typescript,\n hooks: collector && {\n beforeVisit: collector.beforeVisit,\n },\n });\n fn.cooked = cook(precooked.function, fn.source, {\n rules: {\n noVar: true,\n },\n globalVariables: supply(\n precooked.attemptToVisitGlobals,\n getGeneralGlobals(precooked.attemptToVisitGlobals, {\n collectCoverage,\n widgetId,\n widgetVersion,\n app: currentApp,\n storyboardFunctions,\n isStoryboardFunction: true,\n }),\n !!collectCoverage\n ),\n hooks: collector && {\n beforeEvaluate: collector.beforeEvaluate,\n beforeCall: collector.beforeCall,\n beforeBranch: collector.beforeBranch,\n },\n debug: true,\n }) as Function;\n fn.processed = true;\n return fn.cooked;\n }\n\n return {\n storyboardFunctions,\n registerStoryboardFunctions,\n updateStoryboardFunction(\n name: string,\n data: StoryboardFunctionPatch\n ): void {\n const newFn = {\n ...data,\n name,\n };\n const deps = collectMemberUsageInFunction(newFn, \"FN\", true);\n const hasPermissionsCheck = collectMemberUsageInFunction(\n newFn,\n \"PERMISSIONS\",\n true\n ).has(\"check\");\n registeredFunctions.set(name, {\n source: data.source,\n typescript: data.typescript,\n deps,\n hasPermissionsCheck,\n });\n },\n /**\n * Check whether listed functions attempt to call `PERMISSIONS.check()`,\n * includes in nested `FN.*()` calls.\n */\n checkPermissionsUsage(functionNames) {\n const checkedFunctions = new Set<string>();\n const hasPermissionsCheck = (name: string): boolean => {\n if (!checkedFunctions.has(name)) {\n checkedFunctions.add(name);\n const fn = registeredFunctions.get(name);\n return (\n !!fn &&\n (fn.hasPermissionsCheck || [...fn.deps].some(hasPermissionsCheck))\n );\n }\n return false;\n };\n return functionNames.some(hasPermissionsCheck);\n },\n };\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"StoryboardFunctionRegistry.js","names":["cook","precookFunction","supply","collectMemberUsageInFunction","getGeneralGlobals","StoryboardFunctionRegistryFactory","widgetId","widgetVersion","collectCoverage","debuggerOverrides","arguments","length","undefined","registeredFunctions","Map","overrides","storyboardFunctions","Proxy","Object","freeze","get","_target","key","getStoryboardFunction","currentApp","registerStoryboardFunctions","functions","app","clear","Array","isArray","fn","deps","hasPermissionsCheck","has","set","name","source","typescript","processed","cooked","collector","createCollector","precooked","hooks","beforeVisit","globalVariables","attemptToVisitGlobals","isStoryboardFunction","function","rules","noVar","LodashWithStaticFields","_","ArrayConstructor","ObjectWithStaticFields","beforeEvaluate","beforeCall","beforeBranch","debug","updateStoryboardFunction","data","newFn","checkPermissionsUsage","functionNames","checkedFunctions","Set","add","some"],"sources":["../../src/StoryboardFunctionRegistry.ts"],"sourcesContent":["import type { MicroApp, StoryboardFunction } from \"@next-core/types\";\nimport { cook, precookFunction, EstreeNode } from \"@next-core/cook\";\nimport { supply } from \"@next-core/supply\";\nimport { collectMemberUsageInFunction } from \"@next-core/utils/storyboard\";\nimport type _ from \"lodash\";\nimport { getGeneralGlobals } from \"./internal/compute/getGeneralGlobals.js\";\n\n/** @internal */\nexport type ReadonlyStoryboardFunctions = Readonly<Record<string, Function>>;\n\n/** @internal */\nexport type StoryboardFunctionPatch = Pick<\n StoryboardFunction,\n \"source\" | \"typescript\"\n>;\n\n/** @internal */\nexport interface StoryboardFunctionRegistry {\n /** A readonly proxy for accessing cooked storyboard functions. */\n storyboardFunctions: ReadonlyStoryboardFunctions;\n\n /** Register storyboard functions. */\n registerStoryboardFunctions(\n functions: StoryboardFunction[] | undefined,\n app?: PartialMicroApp\n ): void;\n\n /** Update a storyboard function during debugging. */\n updateStoryboardFunction(name: string, data: StoryboardFunctionPatch): void;\n\n checkPermissionsUsage(functionNames: string[]): boolean;\n}\n\n/** @internal */\nexport interface RuntimeStoryboardFunction {\n source: string;\n typescript?: boolean;\n processed?: boolean;\n cooked?: Function;\n deps: Set<string>;\n hasPermissionsCheck: boolean;\n}\n\n/** @internal */\nexport interface FunctionCoverageCollector {\n beforeVisit(node: EstreeNode): void;\n beforeEvaluate(node: EstreeNode): void;\n beforeCall(node: EstreeNode): void;\n beforeBranch(node: EstreeNode, branch: string): void;\n}\n\n/** @internal */\nexport interface FunctionCoverageSettings {\n createCollector(name: string): FunctionCoverageCollector;\n}\n\n/** @internal */\nexport type PartialMicroApp = Pick<MicroApp, \"id\" | \"isBuildPush\">;\n\n/** @internal */\nexport function StoryboardFunctionRegistryFactory({\n widgetId,\n widgetVersion,\n collectCoverage,\n debuggerOverrides,\n}: {\n widgetId?: string;\n widgetVersion?: string;\n collectCoverage?: FunctionCoverageSettings;\n debuggerOverrides?: (ctx: {\n precookFunction: typeof precookFunction;\n cook: typeof cook;\n supply: typeof supply;\n }) => {\n LodashWithStaticFields?: Partial<typeof _>;\n ArrayConstructor?: typeof Array;\n ObjectWithStaticFields?: Partial<typeof Object>;\n };\n} = {}): StoryboardFunctionRegistry {\n const registeredFunctions = new Map<string, RuntimeStoryboardFunction>();\n\n const overrides = debuggerOverrides?.({\n precookFunction,\n cook,\n supply,\n });\n\n // Use `Proxy` with a frozen target, to make a readonly function registry.\n const storyboardFunctions = new Proxy(Object.freeze({}), {\n get(_target, key) {\n return getStoryboardFunction(key as string);\n },\n }) as ReadonlyStoryboardFunctions;\n\n let currentApp: PartialMicroApp | undefined;\n\n function registerStoryboardFunctions(\n functions: StoryboardFunction[],\n app?: PartialMicroApp\n ): void {\n if (app) {\n currentApp = app;\n }\n registeredFunctions.clear();\n if (Array.isArray(functions)) {\n for (const fn of functions) {\n const deps = collectMemberUsageInFunction(fn, \"FN\", !!collectCoverage);\n const hasPermissionsCheck = collectMemberUsageInFunction(\n fn,\n \"PERMISSIONS\",\n !!collectCoverage\n ).has(\"check\");\n registeredFunctions.set(fn.name, {\n source: fn.source,\n typescript: fn.typescript,\n deps,\n hasPermissionsCheck,\n });\n }\n }\n }\n\n function getStoryboardFunction(name: string): Function | undefined {\n const fn = registeredFunctions.get(name);\n if (!fn) {\n return undefined;\n }\n if (fn.processed) {\n return fn.cooked;\n }\n let collector: FunctionCoverageCollector | undefined;\n if (collectCoverage) {\n collector = collectCoverage.createCollector(name);\n }\n const precooked = precookFunction(fn.source, {\n typescript: fn.typescript,\n hooks: collector && {\n beforeVisit: collector.beforeVisit,\n },\n });\n const globalVariables = supply(\n precooked.attemptToVisitGlobals,\n getGeneralGlobals(precooked.attemptToVisitGlobals, {\n collectCoverage,\n widgetId,\n widgetVersion,\n app: currentApp,\n storyboardFunctions,\n isStoryboardFunction: true,\n }),\n !!collectCoverage\n );\n\n fn.cooked = cook(precooked.function, fn.source, {\n rules: {\n noVar: true,\n },\n globalVariables: overrides\n ? {\n ...globalVariables,\n ...(overrides?.LodashWithStaticFields &&\n precooked.attemptToVisitGlobals.has(\"_\")\n ? {\n _: {\n ...(globalVariables._ as typeof _),\n ...overrides.LodashWithStaticFields,\n },\n }\n : null),\n ...(overrides?.ArrayConstructor &&\n precooked.attemptToVisitGlobals.has(\"Array\")\n ? {\n Array: overrides.ArrayConstructor,\n }\n : null),\n ...(overrides?.ObjectWithStaticFields &&\n precooked.attemptToVisitGlobals.has(\"Object\")\n ? {\n Object: {\n ...(globalVariables.Object as typeof Object),\n ...overrides.ObjectWithStaticFields,\n },\n }\n : null),\n }\n : globalVariables,\n ArrayConstructor: overrides?.ArrayConstructor,\n hooks: collector && {\n beforeEvaluate: collector.beforeEvaluate,\n beforeCall: collector.beforeCall,\n beforeBranch: collector.beforeBranch,\n },\n debug: true,\n }) as Function;\n fn.processed = true;\n return fn.cooked;\n }\n\n return {\n storyboardFunctions,\n registerStoryboardFunctions,\n updateStoryboardFunction(\n name: string,\n data: StoryboardFunctionPatch\n ): void {\n const newFn = {\n ...data,\n name,\n };\n const deps = collectMemberUsageInFunction(newFn, \"FN\", true);\n const hasPermissionsCheck = collectMemberUsageInFunction(\n newFn,\n \"PERMISSIONS\",\n true\n ).has(\"check\");\n registeredFunctions.set(name, {\n source: data.source,\n typescript: data.typescript,\n deps,\n hasPermissionsCheck,\n });\n },\n /**\n * Check whether listed functions attempt to call `PERMISSIONS.check()`,\n * includes in nested `FN.*()` calls.\n */\n checkPermissionsUsage(functionNames) {\n const checkedFunctions = new Set<string>();\n const hasPermissionsCheck = (name: string): boolean => {\n if (!checkedFunctions.has(name)) {\n checkedFunctions.add(name);\n const fn = registeredFunctions.get(name);\n return (\n !!fn &&\n (fn.hasPermissionsCheck || [...fn.deps].some(hasPermissionsCheck))\n );\n }\n return false;\n };\n return functionNames.some(hasPermissionsCheck);\n },\n };\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import type { MicroApp, StoryboardFunction } from "@next-core/types";
|
|
2
|
-
import { EstreeNode } from "@next-core/cook";
|
|
2
|
+
import { cook, precookFunction, EstreeNode } from "@next-core/cook";
|
|
3
|
+
import { supply } from "@next-core/supply";
|
|
4
|
+
import type _ from "lodash";
|
|
3
5
|
/** @internal */
|
|
4
6
|
export type ReadonlyStoryboardFunctions = Readonly<Record<string, Function>>;
|
|
5
7
|
/** @internal */
|
|
@@ -37,8 +39,17 @@ export interface FunctionCoverageSettings {
|
|
|
37
39
|
/** @internal */
|
|
38
40
|
export type PartialMicroApp = Pick<MicroApp, "id" | "isBuildPush">;
|
|
39
41
|
/** @internal */
|
|
40
|
-
export declare function StoryboardFunctionRegistryFactory({ widgetId, widgetVersion, collectCoverage, }?: {
|
|
42
|
+
export declare function StoryboardFunctionRegistryFactory({ widgetId, widgetVersion, collectCoverage, debuggerOverrides, }?: {
|
|
41
43
|
widgetId?: string;
|
|
42
44
|
widgetVersion?: string;
|
|
43
45
|
collectCoverage?: FunctionCoverageSettings;
|
|
46
|
+
debuggerOverrides?: (ctx: {
|
|
47
|
+
precookFunction: typeof precookFunction;
|
|
48
|
+
cook: typeof cook;
|
|
49
|
+
supply: typeof supply;
|
|
50
|
+
}) => {
|
|
51
|
+
LodashWithStaticFields?: Partial<typeof _>;
|
|
52
|
+
ArrayConstructor?: typeof Array;
|
|
53
|
+
ObjectWithStaticFields?: Partial<typeof Object>;
|
|
54
|
+
};
|
|
44
55
|
}): StoryboardFunctionRegistry;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@next-core/runtime",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.49.0",
|
|
4
4
|
"homepage": "https://github.com/easyops-cn/next-core/tree/v3/packages/runtime",
|
|
5
5
|
"license": "GPL-3.0",
|
|
6
6
|
"repository": {
|
|
@@ -45,14 +45,14 @@
|
|
|
45
45
|
},
|
|
46
46
|
"dependencies": {
|
|
47
47
|
"@next-core/color-theme": "^0.4.8",
|
|
48
|
-
"@next-core/cook": "^2.
|
|
48
|
+
"@next-core/cook": "^2.4.0",
|
|
49
49
|
"@next-core/http": "^1.2.4",
|
|
50
|
-
"@next-core/i18n": "^1.0.
|
|
50
|
+
"@next-core/i18n": "^1.0.51",
|
|
51
51
|
"@next-core/inject": "^1.0.37",
|
|
52
52
|
"@next-core/loader": "^1.6.0",
|
|
53
53
|
"@next-core/supply": "^2.1.18",
|
|
54
54
|
"@next-core/types": "^1.11.1",
|
|
55
|
-
"@next-core/utils": "^1.7.
|
|
55
|
+
"@next-core/utils": "^1.7.9",
|
|
56
56
|
"@ungap/event-target": "^0.2.4",
|
|
57
57
|
"compare-versions": "^6.1.0",
|
|
58
58
|
"history": "^4.10.1",
|
|
@@ -67,5 +67,5 @@
|
|
|
67
67
|
"@next-core/build-next-libs": "^1.0.17",
|
|
68
68
|
"@next-core/test-next": "^1.1.3"
|
|
69
69
|
},
|
|
70
|
-
"gitHead": "
|
|
70
|
+
"gitHead": "247675e519b0102b91ac691300eb4a85d082f0e5"
|
|
71
71
|
}
|