@overkill-dev/run 0.0.17 → 0.0.19
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/engine/case-execution.d.ts +22 -0
- package/engine/case-execution.d.ts.map +1 -0
- package/engine/case-execution.js +10 -1
- package/engine/case-execution.js.map +1 -1
- package/engine/execution-result.js +4 -0
- package/engine/execution-result.js.map +1 -1
- package/engine/execution-supervision.d.ts +2 -0
- package/engine/execution-supervision.d.ts.map +1 -1
- package/engine/execution-supervision.js +28 -21
- package/engine/execution-supervision.js.map +1 -1
- package/engine/execution.d.ts +4 -1
- package/engine/execution.d.ts.map +1 -1
- package/engine/execution.js +9 -1
- package/engine/execution.js.map +1 -1
- package/engine/resource-usage-growth.js +12 -0
- package/engine/resource-usage-growth.js.map +1 -0
- package/engine/run-result.d.ts +3 -1
- package/engine/run-result.d.ts.map +1 -1
- package/engine/run-result.js.map +1 -1
- package/package.json +6 -3
- package/packages/run/run.entry-point.d.ts +2 -2
- package/packages/run/run.entry-point.d.ts.map +1 -1
- package/packages/run/run.entry-point.js +1 -1
- package/packages/run/run.entry-point.js.map +1 -1
- package/readme.md +39 -2
- package/run/capability-policy.d.ts +47 -0
- package/run/capability-policy.d.ts.map +1 -0
- package/run/capability-policy.js +395 -0
- package/run/capability-policy.js.map +1 -0
- package/run/collected-run-plan.js +100 -0
- package/run/collected-run-plan.js.map +1 -0
- package/run/command-line-runner.d.ts.map +1 -1
- package/run/command-line-runner.js +6 -3
- package/run/command-line-runner.js.map +1 -1
- package/run/node-host-readers.js +13 -0
- package/run/node-host-readers.js.map +1 -0
- package/run/node-process-capability-restrictions.js +92 -0
- package/run/node-process-capability-restrictions.js.map +1 -0
- package/run/run-config-schema.d.ts +5 -0
- package/run/run-config-schema.d.ts.map +1 -1
- package/run/run-config-schema.js +1 -0
- package/run/run-config-schema.js.map +1 -1
- package/run/run-config.d.ts.map +1 -1
- package/run/run-config.js +8 -2
- package/run/run-config.js.map +1 -1
- package/run/run-engine-selection.js +92 -0
- package/run/run-engine-selection.js.map +1 -0
- package/run/run-facts.js +103 -0
- package/run/run-facts.js.map +1 -0
- package/run/run-local-test-plan.js +25 -0
- package/run/run-local-test-plan.js.map +1 -0
- package/run/run-orchestrator.entry-point.d.ts +2 -0
- package/run/run-orchestrator.entry-point.d.ts.map +1 -0
- package/run/run-orchestrator.entry-point.js +31 -0
- package/run/run-orchestrator.entry-point.js.map +1 -0
- package/run/run-orchestrator.js +27 -33
- package/run/run-orchestrator.js.map +1 -1
- package/run/run-process-engine.js +40 -0
- package/run/run-process-engine.js.map +1 -0
- package/run/run-support.js +133 -0
- package/run/run-support.js.map +1 -0
- package/run/run-test-plan.js +20 -0
- package/run/run-test-plan.js.map +1 -0
- package/run/run-types.d.ts +60 -4
- package/run/run-types.d.ts.map +1 -1
- package/run/run-types.js.map +1 -1
- package/run/run-validation.js +122 -0
- package/run/run-validation.js.map +1 -0
- package/run/run.js +191 -329
- package/run/run.js.map +1 -1
- package/run/supervised-child-process.js +127 -0
- package/run/supervised-child-process.js.map +1 -0
- package/run/supervised-run-resource-policy.js +64 -0
- package/run/supervised-run-resource-policy.js.map +1 -0
- package/run/supervised-run-runtime.js +257 -0
- package/run/supervised-run-runtime.js.map +1 -0
- package/run/supervised-run-state.js +109 -0
- package/run/supervised-run-state.js.map +1 -0
- package/run/supervised-run.js +209 -299
- package/run/supervised-run.js.map +1 -1
- package/sbom.cdx.json +4 -4
- package/run/run-orchestrator.d.ts +0 -3
- package/run/run-orchestrator.d.ts.map +0 -1
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { TestRuntimePolicy } from '../engine/case-execution.ts';
|
|
2
|
+
export type RuntimeCapabilityPolicy = TestRuntimePolicy & {
|
|
3
|
+
readonly recordViolation: (capability: RuntimePolicyCapability, message: string, strictness: RuntimePolicyStrictness) => void;
|
|
4
|
+
};
|
|
5
|
+
export type RuntimeCapabilityPolicyEnvironment = Readonly<Record<string, string | undefined>>;
|
|
6
|
+
declare const runtimePolicyCapabilities: {
|
|
7
|
+
readonly childProcess: "child-process";
|
|
8
|
+
readonly console: "console";
|
|
9
|
+
readonly cryptoRandom: "crypto-random";
|
|
10
|
+
readonly dynamicModuleLoad: "dynamic-module-load";
|
|
11
|
+
readonly fileRead: "fs-read";
|
|
12
|
+
readonly fileWrite: "fs-write";
|
|
13
|
+
readonly inspector: "inspector";
|
|
14
|
+
readonly network: "net";
|
|
15
|
+
readonly openSslStore: "openssl-store";
|
|
16
|
+
readonly processEnvironment: "process-env";
|
|
17
|
+
readonly processExecute: "process-execute";
|
|
18
|
+
readonly rawStderr: "raw-stderr";
|
|
19
|
+
readonly rawStdout: "raw-stdout";
|
|
20
|
+
readonly timer: "timer";
|
|
21
|
+
readonly wasi: "wasi";
|
|
22
|
+
readonly webLocks: "web-locks";
|
|
23
|
+
readonly worker: "worker";
|
|
24
|
+
};
|
|
25
|
+
type RuntimePolicyCapability = typeof runtimePolicyCapabilities[keyof typeof runtimePolicyCapabilities];
|
|
26
|
+
type RuntimePolicyStrictness = 'blocked' | 'observed';
|
|
27
|
+
type CapabilityPolicyOptions = {
|
|
28
|
+
readonly dependencies: RuntimeCapabilityPolicyDependencies;
|
|
29
|
+
readonly observedStderr: boolean;
|
|
30
|
+
readonly observedStdout: boolean;
|
|
31
|
+
};
|
|
32
|
+
export type WebStorageLike = {
|
|
33
|
+
readonly length: number;
|
|
34
|
+
readonly getItem: (key: string) => string | null;
|
|
35
|
+
readonly key: (index: number) => string | null;
|
|
36
|
+
};
|
|
37
|
+
export type RuntimeCapabilityPolicyDependencies = {
|
|
38
|
+
readonly installIpcRestriction: (record: (message: string) => void) => () => void;
|
|
39
|
+
readonly installProcessExecutionRestriction: (record: (message: string) => void) => () => void;
|
|
40
|
+
readonly readEnvironment: () => RuntimeCapabilityPolicyEnvironment;
|
|
41
|
+
readonly readStorage: (name: 'localStorage' | 'sessionStorage') => WebStorageLike | null;
|
|
42
|
+
};
|
|
43
|
+
export declare function isRuntimeCapabilityPolicyEnvironment(value: unknown): value is RuntimeCapabilityPolicyEnvironment;
|
|
44
|
+
export declare function isWebStorageLike(value: unknown): value is WebStorageLike;
|
|
45
|
+
export declare function createRuntimeCapabilityPolicy(options: CapabilityPolicyOptions): RuntimeCapabilityPolicy;
|
|
46
|
+
export {};
|
|
47
|
+
//# sourceMappingURL=capability-policy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capability-policy.d.ts","sourceRoot":"","sources":["../../../../source/run/capability-policy.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAErE,MAAM,MAAM,uBAAuB,GAAG,iBAAiB,GAAG;IACtD,QAAQ,CAAC,eAAe,EAAE,CACtB,UAAU,EAAE,uBAAuB,EACnC,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,uBAAuB,KAClC,IAAI,CAAC;CACb,CAAC;AACF,MAAM,MAAM,kCAAkC,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;AAE9F,QAAA,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;CAkBrB,CAAC;AAEX,KAAK,uBAAuB,GAAG,OAAO,yBAAyB,CAAC,MAAM,OAAO,yBAAyB,CAAC,CAAC;AAGxG,KAAK,uBAAuB,GAAG,SAAS,GAAG,UAAU,CAAC;AAEtD,KAAK,uBAAuB,GAAG;IAC3B,QAAQ,CAAC,YAAY,EAAE,mCAAmC,CAAC;IAC3D,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;CACpC,CAAC;AAiBF,MAAM,MAAM,cAAc,GAAG;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IACjD,QAAQ,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;CAClD,CAAC;AAEF,MAAM,MAAM,mCAAmC,GAAG;IAC9C,QAAQ,CAAC,qBAAqB,EAAE,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,KAAK,MAAM,IAAI,CAAC;IAClF,QAAQ,CAAC,kCAAkC,EAAE,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,KAAK,MAAM,IAAI,CAAC;IAC/F,QAAQ,CAAC,eAAe,EAAE,MAAM,kCAAkC,CAAC;IACnE,QAAQ,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,cAAc,GAAG,gBAAgB,KAAK,cAAc,GAAG,IAAI,CAAC;CAC5F,CAAC;AA6GF,wBAAgB,oCAAoC,CAChD,KAAK,EAAE,OAAO,GACf,KAAK,IAAI,kCAAkC,CAM7C;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,cAAc,CAYxE;AAoSD,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,uBAAuB,GAAG,uBAAuB,CAoFvG"}
|
|
@@ -0,0 +1,395 @@
|
|
|
1
|
+
import asyncHooks, { AsyncLocalStorage } from 'node:async_hooks';
|
|
2
|
+
import diagnosticsChannel from 'node:diagnostics_channel';
|
|
3
|
+
import { caseIdentityKey } from "../engine/identity.js";
|
|
4
|
+
const runtimePolicyCapabilities = {
|
|
5
|
+
childProcess: 'child-process',
|
|
6
|
+
console: 'console',
|
|
7
|
+
cryptoRandom: 'crypto-random',
|
|
8
|
+
dynamicModuleLoad: 'dynamic-module-load',
|
|
9
|
+
fileRead: 'fs-read',
|
|
10
|
+
fileWrite: 'fs-write',
|
|
11
|
+
inspector: 'inspector',
|
|
12
|
+
network: 'net',
|
|
13
|
+
openSslStore: 'openssl-store',
|
|
14
|
+
processEnvironment: 'process-env',
|
|
15
|
+
processExecute: 'process-execute',
|
|
16
|
+
rawStderr: 'raw-stderr',
|
|
17
|
+
rawStdout: 'raw-stdout',
|
|
18
|
+
timer: 'timer',
|
|
19
|
+
wasi: 'wasi',
|
|
20
|
+
webLocks: 'web-locks',
|
|
21
|
+
worker: 'worker'
|
|
22
|
+
};
|
|
23
|
+
const asyncFileResourceTypes = new Set([
|
|
24
|
+
'FILEHANDLE',
|
|
25
|
+
'FILEHANDLECLOSEREQ',
|
|
26
|
+
`${['FS', 'REQ'].join('')}CALLBACK`,
|
|
27
|
+
`${['FS', 'REQ'].join('')}PROMISE`
|
|
28
|
+
]);
|
|
29
|
+
const processExecuteChannel = ['process.', 'exec', 've'].join('');
|
|
30
|
+
const randomResourceReport = {
|
|
31
|
+
capability: runtimePolicyCapabilities.cryptoRandom,
|
|
32
|
+
message: 'Runtime policy violation: asynchronous random resource.',
|
|
33
|
+
strictness: 'observed'
|
|
34
|
+
};
|
|
35
|
+
const staticAsyncResourceReports = {
|
|
36
|
+
RANDOMBYTESREQUEST: randomResourceReport,
|
|
37
|
+
RANDOMPRIMEREQUEST: randomResourceReport,
|
|
38
|
+
WORKER: {
|
|
39
|
+
capability: runtimePolicyCapabilities.worker,
|
|
40
|
+
message: 'Runtime policy violation: worker resource created.',
|
|
41
|
+
strictness: 'observed'
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
const diagnosticsCapabilities = {
|
|
45
|
+
'console.debug': runtimePolicyCapabilities.console,
|
|
46
|
+
'console.error': runtimePolicyCapabilities.console,
|
|
47
|
+
'console.info': runtimePolicyCapabilities.console,
|
|
48
|
+
'console.log': runtimePolicyCapabilities.console,
|
|
49
|
+
'console.warn': runtimePolicyCapabilities.console,
|
|
50
|
+
'http.client.request.created': runtimePolicyCapabilities.network,
|
|
51
|
+
'http.client.request.error': runtimePolicyCapabilities.network,
|
|
52
|
+
'http.client.request.start': runtimePolicyCapabilities.network,
|
|
53
|
+
'locks.request.end': runtimePolicyCapabilities.webLocks,
|
|
54
|
+
'locks.request.grant': runtimePolicyCapabilities.webLocks,
|
|
55
|
+
'locks.request.miss': runtimePolicyCapabilities.webLocks,
|
|
56
|
+
'locks.request.start': runtimePolicyCapabilities.webLocks,
|
|
57
|
+
'net.client.socket': runtimePolicyCapabilities.network,
|
|
58
|
+
'node:permission-model:child': runtimePolicyCapabilities.childProcess,
|
|
59
|
+
'node:permission-model:ffi': runtimePolicyCapabilities.worker,
|
|
60
|
+
'node:permission-model:fs': runtimePolicyCapabilities.fileRead,
|
|
61
|
+
'node:permission-model:inspector': runtimePolicyCapabilities.inspector,
|
|
62
|
+
'node:permission-model:net': runtimePolicyCapabilities.network,
|
|
63
|
+
'node:permission-model:openssl-store': runtimePolicyCapabilities.openSslStore,
|
|
64
|
+
'node:permission-model:wasi': runtimePolicyCapabilities.wasi,
|
|
65
|
+
'node:permission-model:worker': runtimePolicyCapabilities.worker,
|
|
66
|
+
[processExecuteChannel]: runtimePolicyCapabilities.processExecute,
|
|
67
|
+
'tracing:module.import:asyncStart': runtimePolicyCapabilities.dynamicModuleLoad,
|
|
68
|
+
'tracing:module.import:start': runtimePolicyCapabilities.dynamicModuleLoad,
|
|
69
|
+
'tracing:module.require:start': runtimePolicyCapabilities.dynamicModuleLoad,
|
|
70
|
+
'udp.socket': runtimePolicyCapabilities.network,
|
|
71
|
+
worker_threads: runtimePolicyCapabilities.worker
|
|
72
|
+
};
|
|
73
|
+
function sortedEnvironmentEntries(environment) {
|
|
74
|
+
return Object
|
|
75
|
+
.entries(environment)
|
|
76
|
+
.filter(function hasValue(entry) {
|
|
77
|
+
return entry[1] !== undefined;
|
|
78
|
+
})
|
|
79
|
+
.toSorted(function compareEnvironmentEntries(first, second) {
|
|
80
|
+
return first[0].localeCompare(second[0]);
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
function environmentSnapshot(dependencies) {
|
|
84
|
+
const environment = dependencies.readEnvironment();
|
|
85
|
+
return {
|
|
86
|
+
entries: sortedEnvironmentEntries(environment),
|
|
87
|
+
object: environment
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
export function isRuntimeCapabilityPolicyEnvironment(value) {
|
|
91
|
+
return typeof value === 'object' &&
|
|
92
|
+
value !== null &&
|
|
93
|
+
Object.values(value).every(function validEnvironmentValue(entry) {
|
|
94
|
+
return typeof entry === 'string' || entry === undefined;
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
export function isWebStorageLike(value) {
|
|
98
|
+
if (typeof value !== 'object' || value === null) {
|
|
99
|
+
return false;
|
|
100
|
+
}
|
|
101
|
+
const length = Reflect.get(value, 'length');
|
|
102
|
+
const getItem = Reflect.get(value, 'getItem');
|
|
103
|
+
const key = Reflect.get(value, 'key');
|
|
104
|
+
return typeof length === 'number' &&
|
|
105
|
+
typeof getItem === 'function' &&
|
|
106
|
+
typeof key === 'function';
|
|
107
|
+
}
|
|
108
|
+
function storageSnapshot(dependencies, name) {
|
|
109
|
+
const storage = dependencies.readStorage(name);
|
|
110
|
+
if (!isWebStorageLike(storage)) {
|
|
111
|
+
return {
|
|
112
|
+
entries: [],
|
|
113
|
+
object: null
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
const entries = Array
|
|
117
|
+
.from({ length: storage.length }, function toStorageEntry(_unusedValue, index) {
|
|
118
|
+
const key = storage.key(index);
|
|
119
|
+
return key === null ? null : [key, storage.getItem(key) ?? ''];
|
|
120
|
+
})
|
|
121
|
+
.filter(function isEntry(entry) {
|
|
122
|
+
return entry !== null;
|
|
123
|
+
})
|
|
124
|
+
.toSorted(function compareStorageEntries(first, second) {
|
|
125
|
+
return first[0].localeCompare(second[0]);
|
|
126
|
+
});
|
|
127
|
+
return {
|
|
128
|
+
entries,
|
|
129
|
+
object: storage
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
function entriesChanged(before, after) {
|
|
133
|
+
if (before.length !== after.length) {
|
|
134
|
+
return true;
|
|
135
|
+
}
|
|
136
|
+
return before.some(function changed(entry, index) {
|
|
137
|
+
const afterEntry = after[index];
|
|
138
|
+
return afterEntry?.[0] !== entry[0] || afterEntry[1] !== entry[1];
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
function permissionCapability(message, fallback) {
|
|
142
|
+
if (typeof message !== 'object' || message === null) {
|
|
143
|
+
return fallback;
|
|
144
|
+
}
|
|
145
|
+
const permission = String(Reflect.get(message, 'permission'));
|
|
146
|
+
if (permission === 'FileSystemWrite') {
|
|
147
|
+
return runtimePolicyCapabilities.fileWrite;
|
|
148
|
+
}
|
|
149
|
+
if (permission === 'FileSystemRead') {
|
|
150
|
+
return runtimePolicyCapabilities.fileRead;
|
|
151
|
+
}
|
|
152
|
+
return fallback;
|
|
153
|
+
}
|
|
154
|
+
function asyncResourceReport(type, hasActiveCase) {
|
|
155
|
+
if (type === 'Timeout' && hasActiveCase) {
|
|
156
|
+
return {
|
|
157
|
+
capability: runtimePolicyCapabilities.timer,
|
|
158
|
+
message: 'Runtime policy violation: setTimeout/setInterval created a timer.',
|
|
159
|
+
strictness: 'observed'
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
if (asyncFileResourceTypes.has(type)) {
|
|
163
|
+
return {
|
|
164
|
+
capability: runtimePolicyCapabilities.fileRead,
|
|
165
|
+
message: `Runtime policy violation: asynchronous file resource ${type}.`,
|
|
166
|
+
strictness: 'observed'
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
return staticAsyncResourceReports[type] ?? null;
|
|
170
|
+
}
|
|
171
|
+
function createAsyncResourceHook(activeCaseStorage, recordViolation) {
|
|
172
|
+
const createHookKey = 'createHook';
|
|
173
|
+
const createHook = asyncHooks[createHookKey];
|
|
174
|
+
return createHook({
|
|
175
|
+
init(_asyncId, type) {
|
|
176
|
+
const report = asyncResourceReport(type, activeCaseStorage.getStore() !== undefined);
|
|
177
|
+
if (report !== null) {
|
|
178
|
+
recordViolation(report);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
function runtimePolicyError(violation) {
|
|
184
|
+
return {
|
|
185
|
+
attributedTo: violation.caseId,
|
|
186
|
+
cause: violation,
|
|
187
|
+
message: violation.message,
|
|
188
|
+
subtype: 'runtime-policy'
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
function ignoredLoadCapability(capability) {
|
|
192
|
+
return capability === runtimePolicyCapabilities.dynamicModuleLoad ||
|
|
193
|
+
capability === runtimePolicyCapabilities.fileRead;
|
|
194
|
+
}
|
|
195
|
+
function ignoredViolation(violation, activeCase, loadComplete) {
|
|
196
|
+
return activeCase === undefined &&
|
|
197
|
+
(violation.capability === runtimePolicyCapabilities.fileRead ||
|
|
198
|
+
!loadComplete && ignoredLoadCapability(violation.capability));
|
|
199
|
+
}
|
|
200
|
+
function violationPhase(activeCase, loadComplete) {
|
|
201
|
+
if (activeCase !== undefined) {
|
|
202
|
+
return 'body';
|
|
203
|
+
}
|
|
204
|
+
return loadComplete ? 'out-of-test' : 'load';
|
|
205
|
+
}
|
|
206
|
+
function createDiagnosticsSubscriptions(recordViolation) {
|
|
207
|
+
return Object.entries(diagnosticsCapabilities).map(function subscribeToChannel([name, capability]) {
|
|
208
|
+
const channel = diagnosticsChannel.channel(name);
|
|
209
|
+
const listener = function recordDiagnostic(message) {
|
|
210
|
+
const resolvedCapability = name.startsWith('node:permission-model:')
|
|
211
|
+
? permissionCapability(message, capability)
|
|
212
|
+
: capability;
|
|
213
|
+
recordViolation({
|
|
214
|
+
capability: resolvedCapability,
|
|
215
|
+
message: `Runtime policy violation: ${resolvedCapability}.`,
|
|
216
|
+
strictness: name.startsWith('node:permission-model:') ? 'blocked' : 'observed'
|
|
217
|
+
});
|
|
218
|
+
};
|
|
219
|
+
channel.subscribe(listener);
|
|
220
|
+
return {
|
|
221
|
+
unsubscribe() {
|
|
222
|
+
channel.unsubscribe(listener);
|
|
223
|
+
}
|
|
224
|
+
};
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
function environmentChanged(before, after) {
|
|
228
|
+
return before.environment.object !== after.object ||
|
|
229
|
+
entriesChanged(before.environment.entries, after.entries);
|
|
230
|
+
}
|
|
231
|
+
function storageChanged(before, after) {
|
|
232
|
+
return before.object !== after.object || entriesChanged(before.entries, after.entries);
|
|
233
|
+
}
|
|
234
|
+
function takeSnapshots(dependencies) {
|
|
235
|
+
return {
|
|
236
|
+
environment: environmentSnapshot(dependencies),
|
|
237
|
+
localStorage: storageSnapshot(dependencies, 'localStorage'),
|
|
238
|
+
sessionStorage: storageSnapshot(dependencies, 'sessionStorage')
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
function recordSnapshotChanges(before, dependencies, record) {
|
|
242
|
+
const afterEnvironment = environmentSnapshot(dependencies);
|
|
243
|
+
const afterSessionStorage = storageSnapshot(dependencies, 'sessionStorage');
|
|
244
|
+
const afterLocalStorage = storageSnapshot(dependencies, 'localStorage');
|
|
245
|
+
if (environmentChanged(before, afterEnvironment)) {
|
|
246
|
+
record({
|
|
247
|
+
capability: runtimePolicyCapabilities.processEnvironment,
|
|
248
|
+
message: 'Runtime policy violation: process.env changed.',
|
|
249
|
+
strictness: 'observed'
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
if (storageChanged(before.sessionStorage, afterSessionStorage)) {
|
|
253
|
+
record({
|
|
254
|
+
capability: runtimePolicyCapabilities.fileWrite,
|
|
255
|
+
message: 'Runtime policy violation: sessionStorage changed.',
|
|
256
|
+
strictness: 'observed'
|
|
257
|
+
});
|
|
258
|
+
}
|
|
259
|
+
if (storageChanged(before.localStorage, afterLocalStorage)) {
|
|
260
|
+
record({
|
|
261
|
+
capability: runtimePolicyCapabilities.fileWrite,
|
|
262
|
+
message: 'Runtime policy violation: localStorage changed.',
|
|
263
|
+
strictness: 'observed'
|
|
264
|
+
});
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
function installRuntimePolicyRestrictions(dependencies, record) {
|
|
268
|
+
const restoreProcessExecution = dependencies.installProcessExecutionRestriction(function recordProcessExecutionViolation(message) {
|
|
269
|
+
record({
|
|
270
|
+
capability: runtimePolicyCapabilities.processExecute,
|
|
271
|
+
message,
|
|
272
|
+
strictness: 'blocked'
|
|
273
|
+
});
|
|
274
|
+
});
|
|
275
|
+
const restoreIpc = dependencies.installIpcRestriction(function recordIpcViolation(message) {
|
|
276
|
+
record({
|
|
277
|
+
capability: runtimePolicyCapabilities.childProcess,
|
|
278
|
+
message,
|
|
279
|
+
strictness: 'blocked'
|
|
280
|
+
});
|
|
281
|
+
});
|
|
282
|
+
return function restoreRuntimePolicyRestrictions() {
|
|
283
|
+
restoreIpc();
|
|
284
|
+
restoreProcessExecution();
|
|
285
|
+
};
|
|
286
|
+
}
|
|
287
|
+
function startRuntimePolicyMonitoring(activeCaseStorage, record, dependencies) {
|
|
288
|
+
const subscriptions = createDiagnosticsSubscriptions(record);
|
|
289
|
+
const hook = createAsyncResourceHook(activeCaseStorage, record);
|
|
290
|
+
const restoreRestrictions = installRuntimePolicyRestrictions(dependencies, record);
|
|
291
|
+
hook.enable();
|
|
292
|
+
return { hook, restoreRestrictions, subscriptions };
|
|
293
|
+
}
|
|
294
|
+
function stopRuntimePolicyMonitoring(monitoring) {
|
|
295
|
+
monitoring.hook.disable();
|
|
296
|
+
monitoring.restoreRestrictions();
|
|
297
|
+
for (const subscription of monitoring.subscriptions) {
|
|
298
|
+
subscription.unsubscribe();
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
function rawOutputPolicyError(capability, message) {
|
|
302
|
+
return runtimePolicyError({
|
|
303
|
+
capability,
|
|
304
|
+
caseId: null,
|
|
305
|
+
message,
|
|
306
|
+
phase: 'out-of-test',
|
|
307
|
+
strictness: 'observed'
|
|
308
|
+
});
|
|
309
|
+
}
|
|
310
|
+
function rawOutputPolicyErrors(options) {
|
|
311
|
+
const errors = [];
|
|
312
|
+
if (options.observedStdout) {
|
|
313
|
+
errors.push(rawOutputPolicyError('raw-stdout', 'Runtime policy violation: unexpected stdout output.'));
|
|
314
|
+
}
|
|
315
|
+
if (options.observedStderr) {
|
|
316
|
+
errors.push(rawOutputPolicyError('raw-stderr', 'Runtime policy violation: unexpected stderr output.'));
|
|
317
|
+
}
|
|
318
|
+
return errors;
|
|
319
|
+
}
|
|
320
|
+
export function createRuntimeCapabilityPolicy(options) {
|
|
321
|
+
const activeCaseStorage = new AsyncLocalStorage();
|
|
322
|
+
const caseErrors = new Map();
|
|
323
|
+
const runErrors = [];
|
|
324
|
+
let loadComplete = false;
|
|
325
|
+
function record(violation) {
|
|
326
|
+
const activeCase = activeCaseStorage.getStore();
|
|
327
|
+
if (ignoredViolation(violation, activeCase, loadComplete)) {
|
|
328
|
+
return;
|
|
329
|
+
}
|
|
330
|
+
const completedViolation = {
|
|
331
|
+
...violation,
|
|
332
|
+
caseId: activeCase?.id ?? null,
|
|
333
|
+
phase: violationPhase(activeCase, loadComplete)
|
|
334
|
+
};
|
|
335
|
+
const error = runtimePolicyError(completedViolation);
|
|
336
|
+
if (activeCase === undefined) {
|
|
337
|
+
runErrors.push(error);
|
|
338
|
+
return;
|
|
339
|
+
}
|
|
340
|
+
caseErrors.set(activeCase.key, [...caseErrors.get(activeCase.key) ?? [], error]);
|
|
341
|
+
}
|
|
342
|
+
function tryRecord(violation) {
|
|
343
|
+
try {
|
|
344
|
+
record(violation);
|
|
345
|
+
}
|
|
346
|
+
catch {
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
const monitoring = startRuntimePolicyMonitoring(activeCaseStorage, tryRecord, options.dependencies);
|
|
350
|
+
return {
|
|
351
|
+
recordViolation(capability, message, strictness) {
|
|
352
|
+
record({ capability, message, strictness });
|
|
353
|
+
},
|
|
354
|
+
async runCase(testCase, run) {
|
|
355
|
+
loadComplete = true;
|
|
356
|
+
const activeCase = {
|
|
357
|
+
id: testCase.id,
|
|
358
|
+
key: caseIdentityKey(testCase.id)
|
|
359
|
+
};
|
|
360
|
+
const before = takeSnapshots(options.dependencies);
|
|
361
|
+
try {
|
|
362
|
+
return await activeCaseStorage.run(activeCase, run);
|
|
363
|
+
}
|
|
364
|
+
finally {
|
|
365
|
+
activeCaseStorage.run(activeCase, function recordCaseSnapshotChanges() {
|
|
366
|
+
recordSnapshotChanges(before, options.dependencies, record);
|
|
367
|
+
});
|
|
368
|
+
}
|
|
369
|
+
},
|
|
370
|
+
async runLoad(run) {
|
|
371
|
+
const before = takeSnapshots(options.dependencies);
|
|
372
|
+
try {
|
|
373
|
+
return await run();
|
|
374
|
+
}
|
|
375
|
+
finally {
|
|
376
|
+
recordSnapshotChanges(before, options.dependencies, record);
|
|
377
|
+
loadComplete = true;
|
|
378
|
+
}
|
|
379
|
+
},
|
|
380
|
+
takeCaseErrors(testCase) {
|
|
381
|
+
const key = caseIdentityKey(testCase.id);
|
|
382
|
+
const errors = caseErrors.get(key) ?? [];
|
|
383
|
+
caseErrors.delete(key);
|
|
384
|
+
return errors;
|
|
385
|
+
},
|
|
386
|
+
takeRunErrors() {
|
|
387
|
+
stopRuntimePolicyMonitoring(monitoring);
|
|
388
|
+
runErrors.push(...rawOutputPolicyErrors(options));
|
|
389
|
+
const errors = Array.from(runErrors);
|
|
390
|
+
runErrors.length = 0;
|
|
391
|
+
return errors;
|
|
392
|
+
}
|
|
393
|
+
};
|
|
394
|
+
}
|
|
395
|
+
//# sourceMappingURL=capability-policy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capability-policy.js","sourceRoot":"","sources":["../../../../source/run/capability-policy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import "../compare/serialized-value.js";
|
|
2
|
+
import { caseIdentityKey, createCaseId } from "../engine/identity.js";
|
|
3
|
+
function collectedCaseId(file, testCase) {
|
|
4
|
+
return createCaseId(file, testCase.suite, testCase.name, testCase.params);
|
|
5
|
+
}
|
|
6
|
+
function collectedCases(plan) {
|
|
7
|
+
return plan.files.flatMap(function collectFileCases(file) {
|
|
8
|
+
return file.cases.map(function collectCase(testCase) {
|
|
9
|
+
return {
|
|
10
|
+
file: file.file,
|
|
11
|
+
testCase
|
|
12
|
+
};
|
|
13
|
+
});
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
function hasVerdict(verdict) {
|
|
17
|
+
return function resultHasVerdict(testResult) {
|
|
18
|
+
return testResult.verdict === verdict;
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
function suiteKey(suitePath) {
|
|
22
|
+
return suitePath.join(' > ');
|
|
23
|
+
}
|
|
24
|
+
function emptySuiteRunCounts() {
|
|
25
|
+
return { discovered: 0, executed: 0, planned: 0 };
|
|
26
|
+
}
|
|
27
|
+
function incrementSuiteRunCounts(counts, field) {
|
|
28
|
+
return {
|
|
29
|
+
discovered: counts.discovered + (field === 'discovered' ? 1 : 0),
|
|
30
|
+
executed: counts.executed + (field === 'executed' ? 1 : 0),
|
|
31
|
+
planned: counts.planned + (field === 'planned' ? 1 : 0)
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
function countSuitePath(counts, suitePath, field) {
|
|
35
|
+
let updatedCounts = counts;
|
|
36
|
+
for (let pathLength = 1; pathLength <= suitePath.length; pathLength += 1) {
|
|
37
|
+
const key = suiteKey(suitePath.slice(0, pathLength));
|
|
38
|
+
updatedCounts = {
|
|
39
|
+
...updatedCounts,
|
|
40
|
+
[key]: incrementSuiteRunCounts(updatedCounts[key] ?? emptySuiteRunCounts(), field)
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
return updatedCounts;
|
|
44
|
+
}
|
|
45
|
+
function countSuites(plan, perTest) {
|
|
46
|
+
let counts = {};
|
|
47
|
+
const executedIds = new Set(perTest.map(function toIdentityKey(testResult) {
|
|
48
|
+
return caseIdentityKey(testResult.id);
|
|
49
|
+
}));
|
|
50
|
+
for (const collectedCase of collectedCases(plan)) {
|
|
51
|
+
counts = countSuitePath(counts, collectedCase.testCase.suite, 'discovered');
|
|
52
|
+
counts = countSuitePath(counts, collectedCase.testCase.suite, 'planned');
|
|
53
|
+
if (executedIds.has(caseIdentityKey(collectedCaseId(collectedCase.file, collectedCase.testCase)))) {
|
|
54
|
+
counts = countSuitePath(counts, collectedCase.testCase.suite, 'executed');
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return counts;
|
|
58
|
+
}
|
|
59
|
+
function countOutcomes(plan, perTest) {
|
|
60
|
+
const planned = collectedCases(plan).length;
|
|
61
|
+
return {
|
|
62
|
+
crashed: perTest.filter(hasVerdict('crashed')).length,
|
|
63
|
+
defined: plan.defined,
|
|
64
|
+
discovered: planned,
|
|
65
|
+
failed: perTest.filter(hasVerdict('fail')).length,
|
|
66
|
+
inconclusive: perTest.filter(hasVerdict('inconclusive')).length,
|
|
67
|
+
passed: perTest.filter(hasVerdict('pass')).length,
|
|
68
|
+
planned,
|
|
69
|
+
resourceExhausted: perTest.filter(hasVerdict('resource-exhausted')).length,
|
|
70
|
+
runtimePolicy: perTest.filter(hasVerdict('runtime-policy')).length,
|
|
71
|
+
skipped: perTest.filter(hasVerdict('skip')).length
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
export function collectedRunCaseFacts(plan) {
|
|
76
|
+
return collectedCases(plan).map(function toRunCaseFacts(collectedCase) {
|
|
77
|
+
return {
|
|
78
|
+
id: collectedCaseId(collectedCase.file, collectedCase.testCase),
|
|
79
|
+
metadata: collectedCase.testCase.metadata
|
|
80
|
+
};
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
export function collectedRunCaseIds(plan) {
|
|
84
|
+
return collectedCases(plan).map(function toCaseId(collectedCase) {
|
|
85
|
+
return collectedCaseId(collectedCase.file, collectedCase.testCase);
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
export function createRunResultFromCollectedPlan(plan, perTest, runnerErrors, timing) {
|
|
89
|
+
return {
|
|
90
|
+
artifacts: [],
|
|
91
|
+
bySuite: countSuites(plan, perTest),
|
|
92
|
+
orphans: plan.orphans,
|
|
93
|
+
perTest,
|
|
94
|
+
resourceUsage: timing.resourceUsage,
|
|
95
|
+
runnerErrors,
|
|
96
|
+
summary: countOutcomes(plan, perTest),
|
|
97
|
+
wallTimeMs: timing.wallClock.currentTimestampInMilliseconds - timing.startedAtMs
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=collected-run-plan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collected-run-plan.js","sourceRoot":"","sources":["../../../../source/run/collected-run-plan.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command-line-runner.d.ts","sourceRoot":"","sources":["../../../../source/run/command-line-runner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAmB,MAAM,uBAAuB,CAAC;AAEvE,OAAO,KAAK,EAAyB,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAE7E,OAAO,EAEH,KAAK,eAAe,EACpB,KAAK,oBAAoB,EAC5B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAIH,KAAK,2BAA2B,EAChC,KAAK,4BAA4B,EACjC,KAAK,kBAAkB,EACvB,KAAK,0BAA0B,EAC/B,KAAK,uBAAuB,IAAI,4BAA4B,EAC/D,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAEH,KAAK,yBAAyB,EACjC,MAAM,qCAAqC,CAAC;AAO7C,MAAM,MAAM,iBAAiB,GAAG;IAC5B,QAAQ,CAAC,QAAQ,EAAE,2BAA2B,CAAC;IAC/C,QAAQ,CAAC,KAAK,EAAE,4BAA4B,CAAC;IAC7C,QAAQ,CAAC,SAAS,EAAE,kBAAkB,CAAC;IACvC,QAAQ,CAAC,SAAS,EAAE,kBAAkB,CAAC;IACvC,QAAQ,CAAC,aAAa,EAAE,kBAAkB,CAAC;IAC3C,QAAQ,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,0BAA0B,KAAK,OAAO,CAAC,uBAAuB,CAAC,CAAC;CAChG,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG,4BAA4B,CAAC;AAEnE,MAAM,MAAM,6BAA6B,GAAG,yBAAyB,GAAG;IACpE,QAAQ,CAAC,qBAAqB,EAAE,MAAM,OAAO,CAAC,QAAQ,CAAC,CAAC;IACxD,QAAQ,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE,oBAAoB,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC;IACpF,QAAQ,CAAC,YAAY,EAAE,eAAe,CAAC;CAC1C,CAAC;
|
|
1
|
+
{"version":3,"file":"command-line-runner.d.ts","sourceRoot":"","sources":["../../../../source/run/command-line-runner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAmB,MAAM,uBAAuB,CAAC;AAEvE,OAAO,KAAK,EAAyB,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAE7E,OAAO,EAEH,KAAK,eAAe,EACpB,KAAK,oBAAoB,EAC5B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAIH,KAAK,2BAA2B,EAChC,KAAK,4BAA4B,EACjC,KAAK,kBAAkB,EACvB,KAAK,0BAA0B,EAC/B,KAAK,uBAAuB,IAAI,4BAA4B,EAC/D,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAEH,KAAK,yBAAyB,EACjC,MAAM,qCAAqC,CAAC;AAO7C,MAAM,MAAM,iBAAiB,GAAG;IAC5B,QAAQ,CAAC,QAAQ,EAAE,2BAA2B,CAAC;IAC/C,QAAQ,CAAC,KAAK,EAAE,4BAA4B,CAAC;IAC7C,QAAQ,CAAC,SAAS,EAAE,kBAAkB,CAAC;IACvC,QAAQ,CAAC,SAAS,EAAE,kBAAkB,CAAC;IACvC,QAAQ,CAAC,aAAa,EAAE,kBAAkB,CAAC;IAC3C,QAAQ,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,0BAA0B,KAAK,OAAO,CAAC,uBAAuB,CAAC,CAAC;CAChG,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG,4BAA4B,CAAC;AAEnE,MAAM,MAAM,6BAA6B,GAAG,yBAAyB,GAAG;IACpE,QAAQ,CAAC,qBAAqB,EAAE,MAAM,OAAO,CAAC,QAAQ,CAAC,CAAC;IACxD,QAAQ,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE,oBAAoB,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC;IACpF,QAAQ,CAAC,YAAY,EAAE,eAAe,CAAC;CAC1C,CAAC;AA4EF,wBAAgB,uBAAuB,CAAC,YAAY,EAAE,6BAA6B,GAAG,iBAAiB,CAkBtG;AAQD,eAAO,MAAM,iBAAiB,EAAE,iBAM9B,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { orchestrator } from "./run-orchestrator.js";
|
|
1
|
+
import { orchestrator } from "./run-orchestrator.entry-point.js";
|
|
2
2
|
import { loadRunConfig } from "./run-config.js";
|
|
3
3
|
import { createCommandLineErrorResultFromUnknown, formatFallbackDiagnostics, readExitCodeFromRunResult } from "./command-line-command.js";
|
|
4
4
|
import { createCommandLineCommandNamespace } from "./command-line-command-namespace.js";
|
|
@@ -36,8 +36,11 @@ async function createCommandFromRequest(request, loadedConfig, dependencies) {
|
|
|
36
36
|
return {
|
|
37
37
|
config: await createCommandLineConfig(loadedConfig, request, dependencies),
|
|
38
38
|
cwd: request.cwd,
|
|
39
|
-
engine:
|
|
40
|
-
request:
|
|
39
|
+
engine: { kind: 'default' },
|
|
40
|
+
request: {
|
|
41
|
+
...request.request,
|
|
42
|
+
capabilityRestrictions: { mode: 'enabled' }
|
|
43
|
+
}
|
|
41
44
|
};
|
|
42
45
|
}
|
|
43
46
|
async function runTestsWithLoadedConfig(request, dependencies, loadedConfig) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command-line-runner.js","sourceRoot":"","sources":["../../../../source/run/command-line-runner.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"command-line-runner.js","sourceRoot":"","sources":["../../../../source/run/command-line-runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { isRuntimeCapabilityPolicyEnvironment, isWebStorageLike } from "./capability-policy.js";
|
|
2
|
+
export function readProcessEnvironment(processObject) {
|
|
3
|
+
const environment = Reflect.get(processObject, 'env');
|
|
4
|
+
return isRuntimeCapabilityPolicyEnvironment(environment) ? environment : {};
|
|
5
|
+
}
|
|
6
|
+
export function readWebStorage(host, name) {
|
|
7
|
+
if (name === 'localStorage') {
|
|
8
|
+
return null;
|
|
9
|
+
}
|
|
10
|
+
const storage = Reflect.get(host, name);
|
|
11
|
+
return isWebStorageLike(storage) ? storage : null;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=node-host-readers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-host-readers.js","sourceRoot":"","sources":["../../../../source/run/node-host-readers.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,oCAAoC,EACpC,gBAAgB,EAGnB,MAAM,wBAAwB,CAAC;AAWhC,MAAM,UAAU,sBAAsB,CAAC,aAAqC;IACxE,MAAM,WAAW,GAAY,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;IAE/D,OAAO,oCAAoC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;AAChF,CAAC;AAED,MAAM,UAAU,cAAc,CAC1B,IAAoB,EACpB,IAAuC;IAEvC,IAAI,IAAI,KAAK,cAAc,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,MAAM,OAAO,GAAY,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAEjD,OAAO,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;AACtD,CAAC"}
|