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.
Files changed (74) hide show
  1. package/dist/index.d.ts +3 -1
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +2 -0
  4. package/dist/index.js.map +1 -1
  5. package/dist/script/executor.d.ts.map +1 -1
  6. package/dist/script/executor.js +118 -9
  7. package/dist/script/executor.js.map +1 -1
  8. package/dist/script/features/counter.d.ts +11 -0
  9. package/dist/script/features/counter.d.ts.map +1 -0
  10. package/dist/script/features/counter.js +43 -0
  11. package/dist/script/features/counter.js.map +1 -0
  12. package/dist/script/features/cryptojs.d.ts +13 -0
  13. package/dist/script/features/cryptojs.d.ts.map +1 -0
  14. package/dist/script/features/cryptojs.js +63 -0
  15. package/dist/script/features/cryptojs.js.map +1 -0
  16. package/dist/script/features/db.d.ts +36 -0
  17. package/dist/script/features/db.d.ts.map +1 -0
  18. package/dist/script/features/db.js +165 -0
  19. package/dist/script/features/db.js.map +1 -0
  20. package/dist/script/features/feature-policy.d.ts +8 -0
  21. package/dist/script/features/feature-policy.d.ts.map +1 -0
  22. package/dist/script/features/feature-policy.js +88 -0
  23. package/dist/script/features/feature-policy.js.map +1 -0
  24. package/dist/script/features/kafka.d.ts +11 -0
  25. package/dist/script/features/kafka.d.ts.map +1 -0
  26. package/dist/script/features/kafka.js +71 -0
  27. package/dist/script/features/kafka.js.map +1 -0
  28. package/dist/script/features/random.d.ts +13 -0
  29. package/dist/script/features/random.d.ts.map +1 -0
  30. package/dist/script/features/random.js +111 -0
  31. package/dist/script/features/random.js.map +1 -0
  32. package/dist/script/features/redis.d.ts +10 -0
  33. package/dist/script/features/redis.d.ts.map +1 -0
  34. package/dist/script/features/redis.js +22 -0
  35. package/dist/script/features/redis.js.map +1 -0
  36. package/dist/script/features/tests.d.ts +7 -1
  37. package/dist/script/features/tests.d.ts.map +1 -1
  38. package/dist/script/features/tests.js +97 -12
  39. package/dist/script/features/tests.js.map +1 -1
  40. package/dist/script/features/variables.d.ts +6 -0
  41. package/dist/script/features/variables.d.ts.map +1 -0
  42. package/dist/script/features/variables.js +25 -0
  43. package/dist/script/features/variables.js.map +1 -0
  44. package/dist/script/scope.d.ts +7 -0
  45. package/dist/script/scope.d.ts.map +1 -1
  46. package/dist/script/scope.js +21 -0
  47. package/dist/script/scope.js.map +1 -1
  48. package/dist/script/types.d.ts +73 -0
  49. package/dist/script/types.d.ts.map +1 -1
  50. package/dist-cjs/index.js +7 -1
  51. package/dist-cjs/index.js.map +1 -1
  52. package/dist-cjs/script/executor.js +118 -9
  53. package/dist-cjs/script/executor.js.map +1 -1
  54. package/dist-cjs/script/features/counter.js +47 -0
  55. package/dist-cjs/script/features/counter.js.map +1 -0
  56. package/dist-cjs/script/features/cryptojs.js +67 -0
  57. package/dist-cjs/script/features/cryptojs.js.map +1 -0
  58. package/dist-cjs/script/features/db.js +169 -0
  59. package/dist-cjs/script/features/db.js.map +1 -0
  60. package/dist-cjs/script/features/feature-policy.js +94 -0
  61. package/dist-cjs/script/features/feature-policy.js.map +1 -0
  62. package/dist-cjs/script/features/kafka.js +77 -0
  63. package/dist-cjs/script/features/kafka.js.map +1 -0
  64. package/dist-cjs/script/features/random.js +115 -0
  65. package/dist-cjs/script/features/random.js.map +1 -0
  66. package/dist-cjs/script/features/redis.js +26 -0
  67. package/dist-cjs/script/features/redis.js.map +1 -0
  68. package/dist-cjs/script/features/tests.js +97 -12
  69. package/dist-cjs/script/features/tests.js.map +1 -1
  70. package/dist-cjs/script/features/variables.js +29 -0
  71. package/dist-cjs/script/features/variables.js.map +1 -0
  72. package/dist-cjs/script/scope.js +21 -0
  73. package/dist-cjs/script/scope.js.map +1 -1
  74. 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
- // The collector is shared by the script's `pm.test` and the script-level
5
- // SKIP path. Errors thrown synchronously inside the callback or rejected
6
- // from an async callback land in the FAIL branch with the error message.
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 testResults = [];
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
- await fn();
38
- testResults.push({ name: normalizedName, status: "PASS" });
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
- testResults.push({
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
- testResults.push({
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,yEAAyE;AACzE,yEAAyE;AACzE,yEAAyE;AAIzE,0EAA0E;AAC1E,0EAA0E;AAC1E,wEAAwE;AACxE,gEAAgE;AAChE,MAAM,mBAAmB,GAAG,CAAC,KAAc,EAAU,EAAE;IACrD,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC,OAAO,CAAC;IACvB,CAAC;IACD,IACE,KAAK;QACL,OAAO,KAAK,KAAK,QAAQ;QACzB,SAAS,IAAI,KAAK;QAClB,OAAQ,KAA8B,CAAC,OAAO,KAAK,QAAQ,EAC3D,CAAC;QACD,OAAQ,KAA6B,CAAC,OAAO,CAAC;IAChD,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC,CAAC;AAYF,MAAM,aAAa,GAAG,CAAC,IAAa,EAAU,EAAE;IAC9C,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC1C,OAAO,OAAO,IAAI,cAAc,CAAC;AACnC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,MAAmB,EAAiB,EAAE;IACvE,MAAM,WAAW,GAAuB,EAAE,CAAC;IAC3C,MAAM,OAAO,GAAoB,EAAE,CAAC;IAEpC,MAAM,IAAI,GAAG,CACX,IAAY,EACZ,EAAoD,EACrC,EAAE;QACjB,MAAM,cAAc,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;QAC3C,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE;aAC3B,IAAI,CAAC,KAAK,IAAI,EAAE;YACf,IAAI,OAAO,EAAE,KAAK,UAAU,EAAE,CAAC;gBAC7B,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;YAC1D,CAAC;YACD,MAAM,EAAE,EAAE,CAAC;YACX,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAC7D,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;YACxB,WAAW,CAAC,IAAI,CAAC;gBACf,IAAI,EAAE,cAAc;gBACpB,MAAM,EAAE,MAAM;gBACd,KAAK,EAAE,mBAAmB,CAAC,KAAK,CAAC;aAClC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACL,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IAEF,MAAM,IAAI,GAAG,CAAC,IAAY,EAAE,MAAe,EAAQ,EAAE;QACnD,WAAW,CAAC,IAAI,CAAC;YACf,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC;YACzB,MAAM,EAAE,MAAM;YACd,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACrC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,MAAM,KAAK,GAAG,KAAK,IAAmB,EAAE;QACtC,MAAM,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC,CAAC;IAEF,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;AAC5C,CAAC,CAAC"}
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"}
@@ -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;IAGvD,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACxC;AAED,eAAO,MAAM,gBAAgB,GAAI,UAAU,aAAa,KAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAuChF,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,QAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAiBrF,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"}
@@ -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;
@@ -1 +1 @@
1
- {"version":3,"file":"scope.js","sourceRoot":"","sources":["../../src/script/scope.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scope.js","sourceRoot":"","sources":["../../src/script/scope.ts"],"names":[],"mappings":"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"}
@@ -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":"AAMA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AAE7E,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,aAAa,GAAG,OAAO,GAAG,eAAe,CAAC;AAE/E,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,kBAAkB,EAAE,CAAC;CACnC;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,kBAAkB,EAAE,CAAC;IAC9B,KAAK,EAAE,kBAAkB,EAAE,CAAC;IAC5B,IAAI,EAAE,sBAAsB,CAAC;CAC9B;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,aAAa,GAAG,QAAQ,CAAC;IAChC,IAAI,EAAE,KAAK,GAAG,OAAO,CAAC;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;IACnD,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,WAAW,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAMD,MAAM,WAAW,sBAAsB;IACrC,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,QAAQ,CAAC;IACjC,OAAO,EAAE;QACP,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC;QACzB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC5B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAChC,CAAC;CACH;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,QAAQ,CAAC;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,OAAO,EAAE,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,cAAc,EAAE,OAAO,GAAG,IAAI,CAAC;IAC/B,gBAAgB,EAAE,OAAO,EAAE,CAAC;IAC5B,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,OAAO,EAAE;QAAE,GAAG,EAAE,OAAO,EAAE,CAAC;QAAC,IAAI,EAAE,OAAO,EAAE,CAAA;KAAE,CAAC;CAC9C;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,CAAC,KAAK,EAAE,sBAAsB,KAAK,OAAO,CAAC,uBAAuB,CAAC,CAAC;IAC7E,SAAS,CAAC,EAAE,uBAAuB,GAAG,IAAI,CAAC;IAC3C,UAAU,CAAC,EAAE,uBAAuB,GAAG,IAAI,CAAC;IAC5C,aAAa,CAAC,EAAE;QACd,UAAU,CAAC,EAAE;YAAE,YAAY,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QACvC,YAAY,CAAC,EAAE;YAAE,YAAY,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;KAC1C,CAAC;CACH;AAED,MAAM,MAAM,oBAAoB,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAEpD,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,oBAAoB,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;CAChB;AAQD,MAAM,WAAW,kBAAkB;IACjC,WAAW,CAAC,EAAE;QACZ,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC/B,aAAa,CAAC,EAAE,OAAO,CAAC;KACzB,CAAC;IACF,OAAO,CAAC,EAAE;QACR,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC/B,aAAa,CAAC,EAAE,OAAO,CAAC;KACzB,CAAC;IACF,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B,QAAQ,CAAC,EAAE,mBAAmB,CAAC;IAC/B,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAC;IAC5D,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAEhC,aAAa,CAAC,EAAE,mBAAmB,CAAC;IACpC,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,UAAU,CAAC,EAAE;QACX,GAAG,CAAC,EAAE,OAAO,CAAC;QACd,IAAI,CAAC,EAAE,OAAO,CAAC;QACf,EAAE,CAAC,EAAE,kBAAkB,CAAC;QACxB,KAAK,CAAC,EAAE,qBAAqB,CAAC;QAC9B,KAAK,CAAC,EAAE,qBAAqB,CAAC;QAC9B,MAAM,CAAC,EAAE,OAAO,GAAG;YAAE,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;SAAE,CAAC;QAC1C,OAAO,CAAC,EAAE,uBAAuB,CAAC;QAClC,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB,CAAC;CACH;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,YAAY,EAAE,kBAAkB,CAAC;CAClC;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,WAAW,GAAG,IAAI,CAAC;IAC1B,WAAW,EAAE,gBAAgB,EAAE,CAAC;IAChC,iBAAiB,EAAE,sBAAsB,EAAE,CAAC;IAC5C,IAAI,EAAE,cAAc,EAAE,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,cAAc,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAG7B,eAAe,CAAC,EAAE,oBAAoB,EAAE,CAAC;IACzC,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC9B"}
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);
@@ -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;AAetC,iEAA+E;AAAtE,4GAAA,WAAW,OAAA;AAAE,gHAAA,eAAe,OAAA;AACrC,wEAAoE;AAA3D,yHAAA,iBAAiB,OAAA;AAC1B,6DAA2C;AAC3C,mDAAiC"}
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 three
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 buildPm = (capabilities, logs, collectors) => {
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
- return {
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
- const logCollector = capabilities.extensions?.log
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
- return {
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
- return {
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