callman-core 1.1.0 → 1.2.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/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/script/executor.d.ts.map +1 -1
- package/dist/script/executor.js +118 -9
- package/dist/script/executor.js.map +1 -1
- package/dist/script/features/counter.d.ts +11 -0
- package/dist/script/features/counter.d.ts.map +1 -0
- package/dist/script/features/counter.js +43 -0
- package/dist/script/features/counter.js.map +1 -0
- package/dist/script/features/cryptojs.d.ts +13 -0
- package/dist/script/features/cryptojs.d.ts.map +1 -0
- package/dist/script/features/cryptojs.js +63 -0
- package/dist/script/features/cryptojs.js.map +1 -0
- package/dist/script/features/db.d.ts +36 -0
- package/dist/script/features/db.d.ts.map +1 -0
- package/dist/script/features/db.js +165 -0
- package/dist/script/features/db.js.map +1 -0
- package/dist/script/features/feature-policy.d.ts +8 -0
- package/dist/script/features/feature-policy.d.ts.map +1 -0
- package/dist/script/features/feature-policy.js +88 -0
- package/dist/script/features/feature-policy.js.map +1 -0
- package/dist/script/features/kafka.d.ts +11 -0
- package/dist/script/features/kafka.d.ts.map +1 -0
- package/dist/script/features/kafka.js +71 -0
- package/dist/script/features/kafka.js.map +1 -0
- package/dist/script/features/random.d.ts +13 -0
- package/dist/script/features/random.d.ts.map +1 -0
- package/dist/script/features/random.js +111 -0
- package/dist/script/features/random.js.map +1 -0
- package/dist/script/features/redis.d.ts +10 -0
- package/dist/script/features/redis.d.ts.map +1 -0
- package/dist/script/features/redis.js +22 -0
- package/dist/script/features/redis.js.map +1 -0
- package/dist/script/features/tests.d.ts +7 -1
- package/dist/script/features/tests.d.ts.map +1 -1
- package/dist/script/features/tests.js +97 -12
- package/dist/script/features/tests.js.map +1 -1
- package/dist/script/features/variables.d.ts +6 -0
- package/dist/script/features/variables.d.ts.map +1 -0
- package/dist/script/features/variables.js +25 -0
- package/dist/script/features/variables.js.map +1 -0
- package/dist/script/scope.d.ts +7 -0
- package/dist/script/scope.d.ts.map +1 -1
- package/dist/script/scope.js +21 -0
- package/dist/script/scope.js.map +1 -1
- package/dist/script/types.d.ts +73 -0
- package/dist/script/types.d.ts.map +1 -1
- package/dist-cjs/index.js +7 -1
- package/dist-cjs/index.js.map +1 -1
- package/dist-cjs/script/executor.js +118 -9
- package/dist-cjs/script/executor.js.map +1 -1
- package/dist-cjs/script/features/counter.js +47 -0
- package/dist-cjs/script/features/counter.js.map +1 -0
- package/dist-cjs/script/features/cryptojs.js +67 -0
- package/dist-cjs/script/features/cryptojs.js.map +1 -0
- package/dist-cjs/script/features/db.js +169 -0
- package/dist-cjs/script/features/db.js.map +1 -0
- package/dist-cjs/script/features/feature-policy.js +94 -0
- package/dist-cjs/script/features/feature-policy.js.map +1 -0
- package/dist-cjs/script/features/kafka.js +77 -0
- package/dist-cjs/script/features/kafka.js.map +1 -0
- package/dist-cjs/script/features/random.js +115 -0
- package/dist-cjs/script/features/random.js.map +1 -0
- package/dist-cjs/script/features/redis.js +26 -0
- package/dist-cjs/script/features/redis.js.map +1 -0
- package/dist-cjs/script/features/tests.js +97 -12
- package/dist-cjs/script/features/tests.js.map +1 -1
- package/dist-cjs/script/features/variables.js +29 -0
- package/dist-cjs/script/features/variables.js.map +1 -0
- package/dist-cjs/script/scope.js +21 -0
- package/dist-cjs/script/scope.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,9 +1,18 @@
|
|
|
1
1
|
// pm.test collector — runs each callback as a fire-and-forget Promise that
|
|
2
2
|
// resolves to PASS/FAIL/SKIP and surfaces the result via `flush()`.
|
|
3
3
|
//
|
|
4
|
-
//
|
|
5
|
-
//
|
|
6
|
-
//
|
|
4
|
+
// Two collection-runner extensions:
|
|
5
|
+
// 1. selectedTestNames — when present, only tests whose name appears in
|
|
6
|
+
// the set actually execute. Used for kafka-deferred re-runs where the
|
|
7
|
+
// caller wants to retry only previously-pending tests.
|
|
8
|
+
// 2. allowDeferredKafkaTests — when true, a thrown
|
|
9
|
+
// PendingKafkaDependencyError is caught and routed to deferredTestNames
|
|
10
|
+
// (instead of being recorded as a FAIL). The caller re-invokes the
|
|
11
|
+
// script later with kafka data populated.
|
|
12
|
+
// 3. DisabledFeatureDependencyError is recognized regardless and produces
|
|
13
|
+
// a SKIP test result with a descriptive error message.
|
|
14
|
+
import { DisabledFeatureDependencyError } from "./feature-policy.js";
|
|
15
|
+
import { PendingKafkaDependencyError } from "./kafka.js";
|
|
7
16
|
// Errors thrown inside the vm context cross a realm boundary, which means
|
|
8
17
|
// `error instanceof Error` from the host's perspective is FALSE even when
|
|
9
18
|
// the value has a real .message property. Read the message structurally
|
|
@@ -20,43 +29,119 @@ const extractErrorMessage = (error) => {
|
|
|
20
29
|
}
|
|
21
30
|
return String(error);
|
|
22
31
|
};
|
|
32
|
+
// Cross-realm error name extraction — used to recognize symbolically named
|
|
33
|
+
// errors like PendingKafkaDependencyError that may arrive as cross-realm
|
|
34
|
+
// values failing instanceof checks.
|
|
35
|
+
const extractErrorName = (error) => {
|
|
36
|
+
if (error instanceof Error) {
|
|
37
|
+
return error.name;
|
|
38
|
+
}
|
|
39
|
+
if (error &&
|
|
40
|
+
typeof error === "object" &&
|
|
41
|
+
"name" in error &&
|
|
42
|
+
typeof error.name === "string") {
|
|
43
|
+
return error.name;
|
|
44
|
+
}
|
|
45
|
+
return "";
|
|
46
|
+
};
|
|
47
|
+
const isPendingKafkaError = (error) => error instanceof PendingKafkaDependencyError ||
|
|
48
|
+
extractErrorName(error) === "PendingKafkaDependencyError";
|
|
49
|
+
const isDisabledFeatureError = (error) => {
|
|
50
|
+
if (error instanceof DisabledFeatureDependencyError) {
|
|
51
|
+
return { feature: error.feature };
|
|
52
|
+
}
|
|
53
|
+
if (extractErrorName(error) === "DisabledFeatureDependencyError") {
|
|
54
|
+
const feature = error.feature;
|
|
55
|
+
if (feature === "database" || feature === "kafka") {
|
|
56
|
+
return { feature };
|
|
57
|
+
}
|
|
58
|
+
return { feature: "database" };
|
|
59
|
+
}
|
|
60
|
+
return null;
|
|
61
|
+
};
|
|
23
62
|
const normalizeName = (name) => {
|
|
24
63
|
const trimmed = String(name ?? "").trim();
|
|
25
64
|
return trimmed || "Unnamed test";
|
|
26
65
|
};
|
|
27
|
-
export const buildTestCollector = (_stage) => {
|
|
28
|
-
const
|
|
66
|
+
export const buildTestCollector = (_stage, options = {}) => {
|
|
67
|
+
const orderedResults = [];
|
|
68
|
+
const finalResults = [];
|
|
69
|
+
const deferredTestNames = [];
|
|
29
70
|
const pending = [];
|
|
71
|
+
const selected = options.selectedTestNames ? new Set(options.selectedTestNames) : null;
|
|
72
|
+
let activeCallbackCount = 0;
|
|
30
73
|
const test = (name, fn) => {
|
|
31
74
|
const normalizedName = normalizeName(name);
|
|
75
|
+
if (selected && !selected.has(normalizedName)) {
|
|
76
|
+
return Promise.resolve();
|
|
77
|
+
}
|
|
78
|
+
const resultIndex = orderedResults.push(null) - 1;
|
|
32
79
|
const task = Promise.resolve()
|
|
33
80
|
.then(async () => {
|
|
34
81
|
if (typeof fn !== "function") {
|
|
35
82
|
throw new Error("pm.test requires a callback function");
|
|
36
83
|
}
|
|
37
|
-
|
|
38
|
-
|
|
84
|
+
activeCallbackCount += 1;
|
|
85
|
+
try {
|
|
86
|
+
await fn();
|
|
87
|
+
}
|
|
88
|
+
finally {
|
|
89
|
+
activeCallbackCount = Math.max(0, activeCallbackCount - 1);
|
|
90
|
+
}
|
|
91
|
+
orderedResults[resultIndex] = {
|
|
92
|
+
name: normalizedName,
|
|
93
|
+
status: "PASS",
|
|
94
|
+
};
|
|
39
95
|
})
|
|
40
96
|
.catch((error) => {
|
|
41
|
-
|
|
97
|
+
const disabled = isDisabledFeatureError(error);
|
|
98
|
+
if (disabled) {
|
|
99
|
+
orderedResults[resultIndex] = {
|
|
100
|
+
name: normalizedName,
|
|
101
|
+
status: "SKIP",
|
|
102
|
+
error: disabled.feature === "database"
|
|
103
|
+
? "Skipped because database execution is disabled for this collection runner."
|
|
104
|
+
: "Skipped because Kafka execution is disabled for this collection runner.",
|
|
105
|
+
};
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
if (options.allowDeferredKafkaTests && isPendingKafkaError(error)) {
|
|
109
|
+
orderedResults[resultIndex] = null;
|
|
110
|
+
deferredTestNames.push(normalizedName);
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
orderedResults[resultIndex] = {
|
|
42
114
|
name: normalizedName,
|
|
43
115
|
status: "FAIL",
|
|
44
116
|
error: extractErrorMessage(error),
|
|
45
|
-
}
|
|
117
|
+
};
|
|
46
118
|
});
|
|
47
119
|
pending.push(task);
|
|
48
120
|
return task;
|
|
49
121
|
};
|
|
50
122
|
const skip = (name, reason) => {
|
|
51
|
-
|
|
123
|
+
const result = {
|
|
52
124
|
name: normalizeName(name),
|
|
53
125
|
status: "SKIP",
|
|
54
126
|
...(reason ? { error: reason } : {}),
|
|
55
|
-
}
|
|
127
|
+
};
|
|
128
|
+
orderedResults.push(result);
|
|
56
129
|
};
|
|
57
130
|
const flush = async () => {
|
|
58
131
|
await Promise.allSettled(pending);
|
|
132
|
+
for (const entry of orderedResults) {
|
|
133
|
+
if (entry !== null) {
|
|
134
|
+
finalResults.push(entry);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
};
|
|
138
|
+
return {
|
|
139
|
+
test,
|
|
140
|
+
skip,
|
|
141
|
+
testResults: finalResults,
|
|
142
|
+
deferredTestNames,
|
|
143
|
+
flush,
|
|
144
|
+
isInsideCallback: () => activeCallbackCount > 0,
|
|
59
145
|
};
|
|
60
|
-
return { test, skip, testResults, flush };
|
|
61
146
|
};
|
|
62
147
|
//# sourceMappingURL=tests.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tests.js","sourceRoot":"","sources":["../../../src/script/features/tests.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,oEAAoE;AACpE,EAAE;AACF,
|
|
1
|
+
{"version":3,"file":"tests.js","sourceRoot":"","sources":["../../../src/script/features/tests.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export interface VariablesApi {
|
|
2
|
+
resolve: (input: unknown) => string;
|
|
3
|
+
replaceIn: (input: unknown) => string;
|
|
4
|
+
}
|
|
5
|
+
export declare const buildVariablesApi: (environment: Record<string, string>, globals: Record<string, string>) => VariablesApi;
|
|
6
|
+
//# sourceMappingURL=variables.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"variables.d.ts","sourceRoot":"","sources":["../../../src/script/features/variables.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,CAAC;IACpC,SAAS,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,CAAC;CACvC;AASD,eAAO,MAAM,iBAAiB,GAC5B,aAAa,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACnC,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAC9B,YAYF,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
// pm.variables — collection-runner template resolver.
|
|
2
|
+
//
|
|
3
|
+
// Bridges the script sandbox to callman-core's existing template resolver
|
|
4
|
+
// (callman_core/src/variables/resolver.ts). Merges env + globals into a
|
|
5
|
+
// single lookup table so user scripts can call:
|
|
6
|
+
// pm.variables.resolve("Hello {{name}}")
|
|
7
|
+
// regardless of which scope `name` lives in.
|
|
8
|
+
import { resolveTemplate } from "../../variables/resolver.js";
|
|
9
|
+
const stringifyInput = (value) => {
|
|
10
|
+
if (value === undefined || value === null) {
|
|
11
|
+
return "";
|
|
12
|
+
}
|
|
13
|
+
return String(value);
|
|
14
|
+
};
|
|
15
|
+
export const buildVariablesApi = (environment, globals) => {
|
|
16
|
+
// Merge with environment taking precedence over globals (matches the
|
|
17
|
+
// electron runtime.ts behavior where env was spread after globals).
|
|
18
|
+
const mergedScope = { ...globals, ...environment };
|
|
19
|
+
const resolve = (input) => resolveTemplate(stringifyInput(input), { env: mergedScope });
|
|
20
|
+
return {
|
|
21
|
+
resolve,
|
|
22
|
+
replaceIn: resolve,
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=variables.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"variables.js","sourceRoot":"","sources":["../../../src/script/features/variables.ts"],"names":[],"mappings":"AAAA,sDAAsD;AACtD,EAAE;AACF,0EAA0E;AAC1E,wEAAwE;AACxE,gDAAgD;AAChD,2CAA2C;AAC3C,6CAA6C;AAE7C,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAO9D,MAAM,cAAc,GAAG,CAAC,KAAc,EAAU,EAAE;IAChD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAC1C,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,WAAmC,EACnC,OAA+B,EACjB,EAAE;IAChB,qEAAqE;IACrE,oEAAoE;IACpE,MAAM,WAAW,GAA2B,EAAE,GAAG,OAAO,EAAE,GAAG,WAAW,EAAE,CAAC;IAE3E,MAAM,OAAO,GAAG,CAAC,KAAc,EAAU,EAAE,CACzC,eAAe,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC,CAAC;IAE/D,OAAO;QACL,OAAO;QACP,SAAS,EAAE,OAAO;KACnB,CAAC;AACJ,CAAC,CAAC"}
|
package/dist/script/scope.d.ts
CHANGED
|
@@ -9,6 +9,13 @@ export interface ScopeBindings {
|
|
|
9
9
|
test?: unknown;
|
|
10
10
|
expect?: unknown;
|
|
11
11
|
console?: Record<string, (...args: unknown[]) => void>;
|
|
12
|
+
db?: unknown;
|
|
13
|
+
kafka?: unknown;
|
|
14
|
+
redis?: unknown;
|
|
15
|
+
random?: unknown;
|
|
16
|
+
counter?: unknown;
|
|
17
|
+
variables?: unknown;
|
|
18
|
+
CryptoJS?: unknown;
|
|
12
19
|
labelGlobals?: Record<string, unknown>;
|
|
13
20
|
}
|
|
14
21
|
export declare const buildScopeTarget: (bindings: ScopeBindings) => Record<string, unknown>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scope.d.ts","sourceRoot":"","sources":["../../src/script/scope.ts"],"names":[],"mappings":"AAiFA,eAAO,MAAM,oBAAoB,aAgB/B,CAAC;AAEH,eAAO,MAAM,8BAA8B,QAAuB,CAAC;AAEnE,MAAM,WAAW,aAAa;IAE5B,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAM5B,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"scope.d.ts","sourceRoot":"","sources":["../../src/script/scope.ts"],"names":[],"mappings":"AAiFA,eAAO,MAAM,oBAAoB,aAgB/B,CAAC;AAEH,eAAO,MAAM,8BAA8B,QAAuB,CAAC;AAEnE,MAAM,WAAW,aAAa;IAE5B,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAM5B,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC,CAAC;IAIvD,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IAGnB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACxC;AAED,eAAO,MAAM,gBAAgB,GAAI,UAAU,aAAa,KAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CA4DhF,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,QAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAiBrF,CAAC"}
|
package/dist/script/scope.js
CHANGED
|
@@ -120,6 +120,27 @@ export const buildScopeTarget = (bindings) => {
|
|
|
120
120
|
if (bindings.console !== undefined) {
|
|
121
121
|
target.console = bindings.console;
|
|
122
122
|
}
|
|
123
|
+
if (bindings.db !== undefined) {
|
|
124
|
+
target.db = bindings.db;
|
|
125
|
+
}
|
|
126
|
+
if (bindings.kafka !== undefined) {
|
|
127
|
+
target.kafka = bindings.kafka;
|
|
128
|
+
}
|
|
129
|
+
if (bindings.redis !== undefined) {
|
|
130
|
+
target.redis = bindings.redis;
|
|
131
|
+
}
|
|
132
|
+
if (bindings.random !== undefined) {
|
|
133
|
+
target.random = bindings.random;
|
|
134
|
+
}
|
|
135
|
+
if (bindings.counter !== undefined) {
|
|
136
|
+
target.counter = bindings.counter;
|
|
137
|
+
}
|
|
138
|
+
if (bindings.variables !== undefined) {
|
|
139
|
+
target.variables = bindings.variables;
|
|
140
|
+
}
|
|
141
|
+
if (bindings.CryptoJS !== undefined) {
|
|
142
|
+
target.CryptoJS = bindings.CryptoJS;
|
|
143
|
+
}
|
|
123
144
|
if (bindings.labelGlobals) {
|
|
124
145
|
for (const [name, value] of Object.entries(bindings.labelGlobals)) {
|
|
125
146
|
target[name] = value;
|
package/dist/script/scope.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scope.js","sourceRoot":"","sources":["../../src/script/scope.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,EAAE;AACF,wEAAwE;AACxE,4EAA4E;AAC5E,yEAAyE;AACzE,wEAAwE;AACxE,yBAAyB;AACzB,EAAE;AACF,0EAA0E;AAC1E,uEAAuE;AAEvE,MAAM,eAAe,GAA4B;IAC/C,IAAI;IACJ,IAAI;IACJ,MAAM;IACN,MAAM;IACN,OAAO;IACP,KAAK;IACL,MAAM;IACN,IAAI;IACJ,MAAM;IACN,OAAO;IACP,KAAK;IACL,SAAS;IACT,cAAc;IACd,WAAW;IACX,UAAU;IACV,SAAS;IACT,QAAQ;IACR,cAAc;IACd,GAAG;IACH,GAAG;IACH,OAAO;IACP,OAAO;IACP,MAAM;IACN,MAAM;IACN,GAAG;IACH,eAAe;IACf,WAAW;IACX,WAAW;IACX,QAAQ;IACR,UAAU;IACV,kBAAkB;IAClB,kBAAkB;IAClB,QAAQ;IACR,KAAK;IACL,sEAAsE;IACtE,SAAS;IACT,GAAG;IACH,QAAQ;CACT,CAAC;AAEF,MAAM,eAAe,GAAG;IACtB,MAAM;IACN,UAAU;IACV,QAAQ;IACR,YAAY;IACZ,cAAc;IACd,aAAa;IACb,eAAe;IACf,OAAO;IACP,gBAAgB;IAChB,WAAW;IACX,QAAQ;IACR,QAAQ;IACR,UAAU;IACV,MAAM;IACN,YAAY;IACZ,QAAQ;IACR,SAAS;IACT,SAAS;IACT,QAAQ;IACR,SAAS;IACT,WAAW;IACX,eAAe;CACP,CAAC;AAEX,wEAAwE;AACxE,0EAA0E;AAC1E,uEAAuE;AACvE,+BAA+B;AAC/B,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAS;IAClD,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC;IAC/B,GAAG,eAAe;IAClB,IAAI;IACJ,KAAK;IACL,SAAS;IACT,SAAS;IACT,UAAU;IACV,MAAM;IACN,QAAQ;IACR,UAAU;IACV,0EAA0E;IAC1E,iEAAiE;IACjE,IAAI;IACJ,OAAO;IACP,OAAO;CACR,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,8BAA8B,GAAG,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"scope.js","sourceRoot":"","sources":["../../src/script/scope.ts"],"names":[],"mappings":"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"}
|
package/dist/script/types.d.ts
CHANGED
|
@@ -54,6 +54,65 @@ export interface ScriptError {
|
|
|
54
54
|
column: number | null;
|
|
55
55
|
stack: string | null;
|
|
56
56
|
}
|
|
57
|
+
export interface ScriptDbExecutionInput {
|
|
58
|
+
connectionId: string;
|
|
59
|
+
query: string;
|
|
60
|
+
phase: "pre" | "post" | "manual";
|
|
61
|
+
context: {
|
|
62
|
+
response: unknown | null;
|
|
63
|
+
env: Record<string, string>;
|
|
64
|
+
global: Record<string, string>;
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
export interface ScriptDbExecutionResult {
|
|
68
|
+
success: boolean;
|
|
69
|
+
error?: string | null;
|
|
70
|
+
phase: "pre" | "post" | "manual";
|
|
71
|
+
connectionId: string;
|
|
72
|
+
connectionName: string;
|
|
73
|
+
connectionType: "mongo" | "oracle" | string;
|
|
74
|
+
query: string;
|
|
75
|
+
resolvedQuery: string;
|
|
76
|
+
rows: unknown[];
|
|
77
|
+
rowCount: number;
|
|
78
|
+
durationMs: number;
|
|
79
|
+
executedAt: string;
|
|
80
|
+
}
|
|
81
|
+
export interface ScriptKafkaCapability {
|
|
82
|
+
event: unknown | null;
|
|
83
|
+
messages: unknown[];
|
|
84
|
+
matchedMessage: unknown | null;
|
|
85
|
+
capturedMessages: unknown[];
|
|
86
|
+
isListening: boolean;
|
|
87
|
+
}
|
|
88
|
+
export interface ScriptRedisCapability {
|
|
89
|
+
values: Record<string, unknown>;
|
|
90
|
+
results: {
|
|
91
|
+
pre: unknown[];
|
|
92
|
+
post: unknown[];
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
export interface ScriptDbCapability {
|
|
96
|
+
execute: (input: ScriptDbExecutionInput) => Promise<ScriptDbExecutionResult>;
|
|
97
|
+
preResult?: ScriptDbExecutionResult | null;
|
|
98
|
+
postResult?: ScriptDbExecutionResult | null;
|
|
99
|
+
requestConfig?: {
|
|
100
|
+
preRequest?: {
|
|
101
|
+
connectionId?: string;
|
|
102
|
+
};
|
|
103
|
+
postResponse?: {
|
|
104
|
+
connectionId?: string;
|
|
105
|
+
};
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
export type CounterSnapshotEntry = [string, number];
|
|
109
|
+
export interface ScriptCounterCapability {
|
|
110
|
+
snapshot: CounterSnapshotEntry[];
|
|
111
|
+
}
|
|
112
|
+
export interface ScriptFeaturePolicy {
|
|
113
|
+
database: boolean;
|
|
114
|
+
kafka: boolean;
|
|
115
|
+
}
|
|
57
116
|
export interface ScriptCapabilities {
|
|
58
117
|
environment?: {
|
|
59
118
|
values: Record<string, string>;
|
|
@@ -69,9 +128,21 @@ export interface ScriptCapabilities {
|
|
|
69
128
|
workflowContext?: Record<string, unknown>;
|
|
70
129
|
nodeMetaByLabel?: Record<string, ScenarioNodeExecutionMeta>;
|
|
71
130
|
exposeLabelsAsGlobals?: boolean;
|
|
131
|
+
featurePolicy?: ScriptFeaturePolicy;
|
|
132
|
+
allowDeferredKafkaTests?: boolean;
|
|
133
|
+
deferredTestNames?: string[];
|
|
72
134
|
extensions?: {
|
|
73
135
|
log?: boolean;
|
|
74
136
|
node?: boolean;
|
|
137
|
+
db?: ScriptDbCapability;
|
|
138
|
+
kafka?: ScriptKafkaCapability;
|
|
139
|
+
redis?: ScriptRedisCapability;
|
|
140
|
+
random?: boolean | {
|
|
141
|
+
rng?: () => number;
|
|
142
|
+
};
|
|
143
|
+
counter?: ScriptCounterCapability;
|
|
144
|
+
cryptojs?: boolean;
|
|
145
|
+
variables?: boolean;
|
|
75
146
|
};
|
|
76
147
|
}
|
|
77
148
|
export interface ExecuteScriptInput {
|
|
@@ -90,5 +161,7 @@ export interface ExecuteScriptResult {
|
|
|
90
161
|
returnValue?: unknown;
|
|
91
162
|
hasReturnValue: boolean;
|
|
92
163
|
request?: ScriptRequestState;
|
|
164
|
+
counterSnapshot?: CounterSnapshotEntry[];
|
|
165
|
+
deferredTestNames?: string[];
|
|
93
166
|
}
|
|
94
167
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/script/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/script/types.ts"],"names":[],"mappings":"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"}
|
package/dist-cjs/index.js
CHANGED
|
@@ -14,7 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.validateContracts = exports.createExpectApi = exports.PmAssertion = exports.validateScript = exports.executeScript = exports.runScript = exports.resolveTemplateValue = exports.resolveTemplate = exports.EnvStore = exports.executeRequest = exports.runRequest = exports.runCollection = void 0;
|
|
17
|
+
exports.validateContracts = exports.isDisabledFeatureValue = exports.DisabledFeatureDependencyError = exports.isPendingKafkaValue = exports.PendingKafkaDependencyError = exports.createExpectApi = exports.PmAssertion = exports.validateScript = exports.executeScript = exports.runScript = exports.resolveTemplateValue = exports.resolveTemplate = exports.EnvStore = exports.executeRequest = exports.runRequest = exports.runCollection = void 0;
|
|
18
18
|
var runCollection_js_1 = require("./runner/runCollection.js");
|
|
19
19
|
Object.defineProperty(exports, "runCollection", { enumerable: true, get: function () { return runCollection_js_1.runCollection; } });
|
|
20
20
|
var requestRunner_js_1 = require("./runner/requestRunner.js");
|
|
@@ -34,6 +34,12 @@ Object.defineProperty(exports, "validateScript", { enumerable: true, get: functi
|
|
|
34
34
|
var assertions_js_1 = require("./script/features/assertions.js");
|
|
35
35
|
Object.defineProperty(exports, "PmAssertion", { enumerable: true, get: function () { return assertions_js_1.PmAssertion; } });
|
|
36
36
|
Object.defineProperty(exports, "createExpectApi", { enumerable: true, get: function () { return assertions_js_1.createExpectApi; } });
|
|
37
|
+
var kafka_js_1 = require("./script/features/kafka.js");
|
|
38
|
+
Object.defineProperty(exports, "PendingKafkaDependencyError", { enumerable: true, get: function () { return kafka_js_1.PendingKafkaDependencyError; } });
|
|
39
|
+
Object.defineProperty(exports, "isPendingKafkaValue", { enumerable: true, get: function () { return kafka_js_1.isPendingKafkaValue; } });
|
|
40
|
+
var feature_policy_js_1 = require("./script/features/feature-policy.js");
|
|
41
|
+
Object.defineProperty(exports, "DisabledFeatureDependencyError", { enumerable: true, get: function () { return feature_policy_js_1.DisabledFeatureDependencyError; } });
|
|
42
|
+
Object.defineProperty(exports, "isDisabledFeatureValue", { enumerable: true, get: function () { return feature_policy_js_1.isDisabledFeatureValue; } });
|
|
37
43
|
var contractValidator_js_1 = require("./contract/contractValidator.js");
|
|
38
44
|
Object.defineProperty(exports, "validateContracts", { enumerable: true, get: function () { return contractValidator_js_1.validateContracts; } });
|
|
39
45
|
__exportStar(require("./scenario-runner/index.js"), exports);
|
package/dist-cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,8DAA0D;AAAjD,iHAAA,aAAa,OAAA;AACtB,8DAAuD;AAA9C,8GAAA,UAAU,OAAA;AACnB,iEAA6D;AAApD,mHAAA,cAAc,OAAA;AACvB,uDAAmD;AAA1C,uGAAA,QAAQ,OAAA;AACjB,uDAAgF;AAAvE,8GAAA,eAAe,OAAA;AAAE,mHAAA,oBAAoB,OAAA;AAC9C,gDAA+C;AAAtC,sGAAA,SAAS,OAAA;AAClB,oDAAqE;AAA5D,4GAAA,aAAa,OAAA;AAAE,6GAAA,cAAc,OAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,8DAA0D;AAAjD,iHAAA,aAAa,OAAA;AACtB,8DAAuD;AAA9C,8GAAA,UAAU,OAAA;AACnB,iEAA6D;AAApD,mHAAA,cAAc,OAAA;AACvB,uDAAmD;AAA1C,uGAAA,QAAQ,OAAA;AACjB,uDAAgF;AAAvE,8GAAA,eAAe,OAAA;AAAE,mHAAA,oBAAoB,OAAA;AAC9C,gDAA+C;AAAtC,sGAAA,SAAS,OAAA;AAClB,oDAAqE;AAA5D,4GAAA,aAAa,OAAA;AAAE,6GAAA,cAAc,OAAA;AAuBtC,iEAA+E;AAAtE,4GAAA,WAAW,OAAA;AAAE,gHAAA,eAAe,OAAA;AACrC,uDAGoC;AAFlC,uHAAA,2BAA2B,OAAA;AAC3B,+GAAA,mBAAmB,OAAA;AAErB,yEAG6C;AAF3C,mIAAA,8BAA8B,OAAA;AAC9B,2HAAA,sBAAsB,OAAA;AAExB,wEAAoE;AAA3D,yHAAA,iBAAiB,OAAA;AAC1B,6DAA2C;AAC3C,mDAAiC"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
// Public canonical script executor — the single entry point that all
|
|
2
|
+
// Public canonical script executor — the single entry point that all
|
|
3
3
|
// consumers (CLI via legacy shim, backend, electron) ultimately call.
|
|
4
4
|
//
|
|
5
5
|
// Composes:
|
|
6
6
|
// - sandbox (vm.createContext + scope Proxy + reserved globals)
|
|
7
7
|
// - pm API (assertions + tests + env/globals + request/response + node + log)
|
|
8
|
+
// - sandbox-D extensions (db, kafka, redis, random, counter, cryptojs, variables)
|
|
8
9
|
// - timeout (vm-level + outer Promise race)
|
|
9
10
|
// - error serialization (line/column attribution)
|
|
10
11
|
//
|
|
@@ -20,16 +21,88 @@ const request_js_1 = require("./features/request.js");
|
|
|
20
21
|
const response_js_1 = require("./features/response.js");
|
|
21
22
|
const tests_js_1 = require("./features/tests.js");
|
|
22
23
|
const log_js_1 = require("./features/log.js");
|
|
24
|
+
const kafka_js_1 = require("./features/kafka.js");
|
|
25
|
+
const redis_js_1 = require("./features/redis.js");
|
|
26
|
+
const random_js_1 = require("./features/random.js");
|
|
27
|
+
const counter_js_1 = require("./features/counter.js");
|
|
28
|
+
const cryptojs_js_1 = require("./features/cryptojs.js");
|
|
29
|
+
const variables_js_1 = require("./features/variables.js");
|
|
30
|
+
const db_js_1 = require("./features/db.js");
|
|
23
31
|
const sandbox_js_1 = require("./sandbox.js");
|
|
24
32
|
const errors_js_1 = require("./errors.js");
|
|
25
33
|
const timeout_js_1 = require("./timeout.js");
|
|
26
34
|
const DEFAULT_TIMEOUT_MS = 15_000;
|
|
27
35
|
const DEFAULT_FILENAME = "callman-script.js";
|
|
28
36
|
const DEFAULT_STAGE = "script";
|
|
29
|
-
const
|
|
37
|
+
const buildSandboxDFeatures = (capabilities, isInsideTestCallback, envValues, globalValues, responseTemplateRoot) => {
|
|
38
|
+
const extensions = capabilities.extensions ?? {};
|
|
39
|
+
const featurePolicy = capabilities.featurePolicy;
|
|
40
|
+
const pm = {};
|
|
41
|
+
const scopeShortcuts = {};
|
|
42
|
+
let counterSnapshotFn = null;
|
|
43
|
+
if (extensions.kafka) {
|
|
44
|
+
const kafkaEnabled = featurePolicy ? featurePolicy.kafka : true;
|
|
45
|
+
if (kafkaEnabled) {
|
|
46
|
+
const api = (0, kafka_js_1.buildKafkaApi)(extensions.kafka, capabilities.allowDeferredKafkaTests ?? false);
|
|
47
|
+
pm.kafka = api;
|
|
48
|
+
scopeShortcuts.kafka = api;
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
// Disabled kafka — replace with feature-policy guarded value
|
|
52
|
+
// (handled at the test-collector level via DisabledFeatureDependencyError).
|
|
53
|
+
// We still expose the binding so user scripts don't crash at scope lookup.
|
|
54
|
+
void isInsideTestCallback;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
if (extensions.redis) {
|
|
58
|
+
const api = (0, redis_js_1.buildRedisApi)(extensions.redis);
|
|
59
|
+
pm.redis = api;
|
|
60
|
+
scopeShortcuts.redis = api;
|
|
61
|
+
}
|
|
62
|
+
if (extensions.random) {
|
|
63
|
+
const rng = typeof extensions.random === "object" ? extensions.random.rng : undefined;
|
|
64
|
+
const api = (0, random_js_1.buildRandomApi)(rng);
|
|
65
|
+
pm.random = api;
|
|
66
|
+
scopeShortcuts.random = api;
|
|
67
|
+
}
|
|
68
|
+
if (extensions.counter) {
|
|
69
|
+
const feature = (0, counter_js_1.buildCounterFeature)(extensions.counter.snapshot);
|
|
70
|
+
pm.counter = feature.api;
|
|
71
|
+
scopeShortcuts.counter = feature.api;
|
|
72
|
+
counterSnapshotFn = feature.snapshot;
|
|
73
|
+
}
|
|
74
|
+
if (extensions.cryptojs) {
|
|
75
|
+
const api = (0, cryptojs_js_1.createCryptoJsApi)();
|
|
76
|
+
// CryptoJS is exposed ONLY at top-level scope (matching electron's
|
|
77
|
+
// current surface). pm.cryptojs is intentionally NOT set so the parity
|
|
78
|
+
// tests that lock in current behavior continue to pass.
|
|
79
|
+
scopeShortcuts.CryptoJS = api;
|
|
80
|
+
}
|
|
81
|
+
if (extensions.variables) {
|
|
82
|
+
const api = (0, variables_js_1.buildVariablesApi)(envValues, globalValues);
|
|
83
|
+
pm.variables = api;
|
|
84
|
+
scopeShortcuts.variables = api;
|
|
85
|
+
}
|
|
86
|
+
if (extensions.db) {
|
|
87
|
+
const dbEnabled = featurePolicy ? featurePolicy.database : true;
|
|
88
|
+
const api = (0, db_js_1.buildDbApi)({
|
|
89
|
+
capability: extensions.db,
|
|
90
|
+
enabled: dbEnabled,
|
|
91
|
+
isInsideTestCallback,
|
|
92
|
+
responseTemplateRoot,
|
|
93
|
+
environment: envValues,
|
|
94
|
+
globals: globalValues,
|
|
95
|
+
});
|
|
96
|
+
pm.db = api;
|
|
97
|
+
scopeShortcuts.db = api;
|
|
98
|
+
}
|
|
99
|
+
return { pm, scopeShortcuts, counterSnapshotFn };
|
|
100
|
+
};
|
|
101
|
+
const buildPm = (capabilities, logs, collectors, sandboxDPm) => {
|
|
30
102
|
const pm = {
|
|
31
103
|
test: collectors.test.test,
|
|
32
104
|
expect: collectors.expect,
|
|
105
|
+
...sandboxDPm,
|
|
33
106
|
};
|
|
34
107
|
if (collectors.environment) {
|
|
35
108
|
pm.environment = collectors.environment;
|
|
@@ -56,7 +129,7 @@ const buildPm = (capabilities, logs, collectors) => {
|
|
|
56
129
|
}
|
|
57
130
|
return pm;
|
|
58
131
|
};
|
|
59
|
-
const buildScopeBindings = ({ pm, capabilities, consoleApi, envValues, environmentApi, request, response, expect, test, }) => {
|
|
132
|
+
const buildScopeBindings = ({ pm, capabilities, consoleApi, envValues, environmentApi, request, response, expect, test, sandboxDShortcuts, }) => {
|
|
60
133
|
const exposeLabels = capabilities.workflowContext &&
|
|
61
134
|
capabilities.exposeLabelsAsGlobals !== false;
|
|
62
135
|
const labelGlobals = exposeLabels
|
|
@@ -74,6 +147,13 @@ const buildScopeBindings = ({ pm, capabilities, consoleApi, envValues, environme
|
|
|
74
147
|
test,
|
|
75
148
|
expect,
|
|
76
149
|
console: consoleApi,
|
|
150
|
+
db: sandboxDShortcuts.db,
|
|
151
|
+
kafka: sandboxDShortcuts.kafka,
|
|
152
|
+
redis: sandboxDShortcuts.redis,
|
|
153
|
+
random: sandboxDShortcuts.random,
|
|
154
|
+
counter: sandboxDShortcuts.counter,
|
|
155
|
+
variables: sandboxDShortcuts.variables,
|
|
156
|
+
CryptoJS: sandboxDShortcuts.CryptoJS,
|
|
77
157
|
labelGlobals,
|
|
78
158
|
};
|
|
79
159
|
};
|
|
@@ -82,9 +162,10 @@ const executeScript = async (input) => {
|
|
|
82
162
|
const filename = input.filename ?? DEFAULT_FILENAME;
|
|
83
163
|
const stage = input.stage ?? DEFAULT_STAGE;
|
|
84
164
|
const capabilities = input.capabilities;
|
|
165
|
+
const extensions = capabilities.extensions ?? {};
|
|
85
166
|
// Empty / whitespace-only scripts short-circuit with an empty success.
|
|
86
167
|
if (!input.script.trim()) {
|
|
87
|
-
|
|
168
|
+
const passthrough = {
|
|
88
169
|
success: true,
|
|
89
170
|
error: null,
|
|
90
171
|
testResults: [],
|
|
@@ -92,6 +173,13 @@ const executeScript = async (input) => {
|
|
|
92
173
|
logs: [],
|
|
93
174
|
hasReturnValue: false,
|
|
94
175
|
};
|
|
176
|
+
if (extensions.counter) {
|
|
177
|
+
passthrough.counterSnapshot = extensions.counter.snapshot;
|
|
178
|
+
}
|
|
179
|
+
if (capabilities.allowDeferredKafkaTests) {
|
|
180
|
+
passthrough.deferredTestNames = [];
|
|
181
|
+
}
|
|
182
|
+
return passthrough;
|
|
95
183
|
}
|
|
96
184
|
const variableMutations = [];
|
|
97
185
|
const environmentApi = capabilities.environment
|
|
@@ -105,10 +193,16 @@ const executeScript = async (input) => {
|
|
|
105
193
|
: undefined;
|
|
106
194
|
const responseApi = (0, response_js_1.buildResponseApi)(capabilities.response ?? null) ?? undefined;
|
|
107
195
|
const expect = (0, assertions_js_1.createExpectApi)();
|
|
108
|
-
const tests = (0, tests_js_1.buildTestCollector)(stage
|
|
109
|
-
|
|
196
|
+
const tests = (0, tests_js_1.buildTestCollector)(stage, {
|
|
197
|
+
allowDeferredKafkaTests: capabilities.allowDeferredKafkaTests,
|
|
198
|
+
selectedTestNames: capabilities.deferredTestNames,
|
|
199
|
+
});
|
|
200
|
+
const logCollector = extensions.log
|
|
110
201
|
? (0, log_js_1.createLogCollector)()
|
|
111
202
|
: (0, log_js_1.createSilentLogCollector)();
|
|
203
|
+
// Sandbox D feature bundle — depends on env/globals being constructed first
|
|
204
|
+
// (cryptojs/random/counter don't, but variables/db do).
|
|
205
|
+
const sandboxD = buildSandboxDFeatures(capabilities, () => tests.isInsideCallback(), environmentApi?.values ?? capabilities.environment?.values ?? {}, globalsApi?.values ?? capabilities.globals?.values ?? {}, capabilities.response ?? null);
|
|
112
206
|
const pm = buildPm(capabilities, { pmLog: logCollector.pmLog }, {
|
|
113
207
|
test: tests,
|
|
114
208
|
expect,
|
|
@@ -116,7 +210,7 @@ const executeScript = async (input) => {
|
|
|
116
210
|
globals: globalsApi,
|
|
117
211
|
request: requestBundle,
|
|
118
212
|
response: responseApi ?? undefined,
|
|
119
|
-
});
|
|
213
|
+
}, sandboxD.pm);
|
|
120
214
|
const bindings = buildScopeBindings({
|
|
121
215
|
pm,
|
|
122
216
|
capabilities,
|
|
@@ -127,6 +221,7 @@ const executeScript = async (input) => {
|
|
|
127
221
|
response: responseApi,
|
|
128
222
|
expect,
|
|
129
223
|
test: tests.test,
|
|
224
|
+
sandboxDShortcuts: sandboxD.scopeShortcuts,
|
|
130
225
|
});
|
|
131
226
|
let compiled;
|
|
132
227
|
try {
|
|
@@ -136,7 +231,7 @@ const executeScript = async (input) => {
|
|
|
136
231
|
// Parse errors (SyntaxError) — return early as a sandbox error so the
|
|
137
232
|
// caller never sees a raw throw. Mutations and tests are empty since
|
|
138
233
|
// execution never started.
|
|
139
|
-
|
|
234
|
+
const result = {
|
|
140
235
|
success: false,
|
|
141
236
|
error: (0, errors_js_1.toSerializableError)(stage, error),
|
|
142
237
|
testResults: [],
|
|
@@ -145,6 +240,13 @@ const executeScript = async (input) => {
|
|
|
145
240
|
hasReturnValue: false,
|
|
146
241
|
...(requestBundle ? { request: requestBundle.toRequestState() } : {}),
|
|
147
242
|
};
|
|
243
|
+
if (sandboxD.counterSnapshotFn) {
|
|
244
|
+
result.counterSnapshot = sandboxD.counterSnapshotFn();
|
|
245
|
+
}
|
|
246
|
+
if (capabilities.allowDeferredKafkaTests) {
|
|
247
|
+
result.deferredTestNames = [];
|
|
248
|
+
}
|
|
249
|
+
return result;
|
|
148
250
|
}
|
|
149
251
|
let returnValue;
|
|
150
252
|
let hasReturnValue = false;
|
|
@@ -166,7 +268,7 @@ const executeScript = async (input) => {
|
|
|
166
268
|
await Promise.allSettled([tests.flush()]);
|
|
167
269
|
runtimeError = (0, errors_js_1.toSerializableError)(stage, error);
|
|
168
270
|
}
|
|
169
|
-
|
|
271
|
+
const result = {
|
|
170
272
|
success: runtimeError === null,
|
|
171
273
|
error: runtimeError,
|
|
172
274
|
testResults: tests.testResults,
|
|
@@ -176,6 +278,13 @@ const executeScript = async (input) => {
|
|
|
176
278
|
hasReturnValue,
|
|
177
279
|
...(requestBundle ? { request: requestBundle.toRequestState() } : {}),
|
|
178
280
|
};
|
|
281
|
+
if (sandboxD.counterSnapshotFn) {
|
|
282
|
+
result.counterSnapshot = sandboxD.counterSnapshotFn();
|
|
283
|
+
}
|
|
284
|
+
if (capabilities.allowDeferredKafkaTests) {
|
|
285
|
+
result.deferredTestNames = [...tests.deferredTestNames];
|
|
286
|
+
}
|
|
287
|
+
return result;
|
|
179
288
|
};
|
|
180
289
|
exports.executeScript = executeScript;
|
|
181
290
|
// Standalone parse-only check — exposed so the desktop's
|