callman-core 1.34.0 → 1.36.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/ai-packs/feature-policy.md +1 -6
- package/ai-packs/pm-api.md +246 -97
- package/ai-packs/sandbox-globals.md +6 -5
- package/dist/ai/prompts/fragments.d.ts.map +1 -1
- package/dist/ai/prompts/fragments.js +0 -1
- package/dist/ai/prompts/fragments.js.map +1 -1
- package/dist/ai/prompts/unified.js +1 -1
- package/dist/ai/prompts/unified.js.map +1 -1
- package/dist/ai/types.d.ts +1 -1
- package/dist/ai/types.d.ts.map +1 -1
- package/dist/ai/types.js +1 -1
- package/dist/ai/types.js.map +1 -1
- package/dist/index.d.ts +7 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/runner/requestRunner.d.ts.map +1 -1
- package/dist/runner/requestRunner.js +339 -1
- package/dist/runner/requestRunner.js.map +1 -1
- package/dist/runner/runCollection.d.ts +1 -1
- package/dist/runner/runCollection.d.ts.map +1 -1
- package/dist/runner/runCollection.js +60 -7
- package/dist/runner/runCollection.js.map +1 -1
- package/dist/runner/runRequestWithDataset.d.ts.map +1 -1
- package/dist/runner/runRequestWithDataset.js +5 -0
- package/dist/runner/runRequestWithDataset.js.map +1 -1
- package/dist/scenario-runner/adapters/request-executor.d.ts.map +1 -1
- package/dist/scenario-runner/adapters/request-executor.js +7 -0
- package/dist/scenario-runner/adapters/request-executor.js.map +1 -1
- package/dist/scenario-runner/runScenario.d.ts.map +1 -1
- package/dist/scenario-runner/runScenario.js +4 -0
- package/dist/scenario-runner/runScenario.js.map +1 -1
- package/dist/scenario-runner/types.d.ts +11 -0
- package/dist/scenario-runner/types.d.ts.map +1 -1
- package/dist/script/chain.d.ts +56 -0
- package/dist/script/chain.d.ts.map +1 -0
- package/dist/script/chain.js +121 -0
- package/dist/script/chain.js.map +1 -0
- package/dist/script/errors.d.ts.map +1 -1
- package/dist/script/errors.js +6 -4
- package/dist/script/errors.js.map +1 -1
- package/dist/script/executor.d.ts.map +1 -1
- package/dist/script/executor.js +298 -64
- package/dist/script/executor.js.map +1 -1
- package/dist/script/features/collectionVariables.d.ts +4 -4
- package/dist/script/features/collectionVariables.d.ts.map +1 -1
- package/dist/script/features/collectionVariables.js +20 -11
- package/dist/script/features/collectionVariables.js.map +1 -1
- package/dist/script/features/environment.d.ts +4 -4
- package/dist/script/features/environment.d.ts.map +1 -1
- package/dist/script/features/environment.js +20 -11
- package/dist/script/features/environment.js.map +1 -1
- package/dist/script/features/feature-policy.d.ts +1 -1
- package/dist/script/features/feature-policy.d.ts.map +1 -1
- package/dist/script/features/feature-policy.js +2 -2
- package/dist/script/features/feature-policy.js.map +1 -1
- package/dist/script/features/info.d.ts.map +1 -1
- package/dist/script/features/info.js +6 -3
- package/dist/script/features/info.js.map +1 -1
- package/dist/script/features/iterationData.d.ts +12 -0
- package/dist/script/features/iterationData.d.ts.map +1 -0
- package/dist/script/features/iterationData.js +28 -0
- package/dist/script/features/iterationData.js.map +1 -0
- package/dist/script/features/legacyPostman.d.ts +14 -0
- package/dist/script/features/legacyPostman.d.ts.map +1 -0
- package/dist/script/features/legacyPostman.js +106 -0
- package/dist/script/features/legacyPostman.js.map +1 -0
- package/dist/script/features/log.d.ts +35 -8
- package/dist/script/features/log.d.ts.map +1 -1
- package/dist/script/features/log.js +343 -27
- package/dist/script/features/log.js.map +1 -1
- package/dist/script/features/tests.d.ts +7 -8
- package/dist/script/features/tests.d.ts.map +1 -1
- package/dist/script/features/tests.js +90 -64
- package/dist/script/features/tests.js.map +1 -1
- package/dist/script/features/timers.d.ts +7 -1
- package/dist/script/features/timers.d.ts.map +1 -1
- package/dist/script/features/timers.js +17 -5
- package/dist/script/features/timers.js.map +1 -1
- package/dist/script/features/variables.d.ts +25 -4
- package/dist/script/features/variables.d.ts.map +1 -1
- package/dist/script/features/variables.js +26 -9
- package/dist/script/features/variables.js.map +1 -1
- package/dist/script/features/visualizer.d.ts +15 -0
- package/dist/script/features/visualizer.d.ts.map +1 -0
- package/dist/script/features/visualizer.js +52 -0
- package/dist/script/features/visualizer.js.map +1 -0
- package/dist/script/isolated-runner.d.ts +4 -1
- package/dist/script/isolated-runner.d.ts.map +1 -1
- package/dist/script/isolated-runner.js +26 -2
- package/dist/script/isolated-runner.js.map +1 -1
- package/dist/script/layers.d.ts +46 -0
- package/dist/script/layers.d.ts.map +1 -0
- package/dist/script/layers.js +52 -0
- package/dist/script/layers.js.map +1 -0
- package/dist/script/legacy.d.ts +6 -1
- package/dist/script/legacy.d.ts.map +1 -1
- package/dist/script/legacy.js +15 -5
- package/dist/script/legacy.js.map +1 -1
- package/dist/script/pm-api-declarations.d.ts +45 -0
- package/dist/script/pm-api-declarations.d.ts.map +1 -0
- package/dist/script/pm-api-declarations.js +1963 -0
- package/dist/script/pm-api-declarations.js.map +1 -0
- package/dist/script/pm-api-metadata.d.ts +3 -1
- package/dist/script/pm-api-metadata.d.ts.map +1 -1
- package/dist/script/pm-api-metadata.js +336 -106
- package/dist/script/pm-api-metadata.js.map +1 -1
- package/dist/script/pm-api-reference.d.ts.map +1 -1
- package/dist/script/pm-api-reference.js +32 -7
- package/dist/script/pm-api-reference.js.map +1 -1
- package/dist/script/postman/chaiCompat.d.ts +4 -0
- package/dist/script/postman/chaiCompat.d.ts.map +1 -0
- package/dist/script/postman/chaiCompat.js +176 -0
- package/dist/script/postman/chaiCompat.js.map +1 -0
- package/dist/script/postman/cookies.d.ts +36 -0
- package/dist/script/postman/cookies.d.ts.map +1 -0
- package/dist/script/postman/cookies.js +163 -0
- package/dist/script/postman/cookies.js.map +1 -0
- package/dist/script/postman/modules.d.ts +16 -0
- package/dist/script/postman/modules.d.ts.map +1 -0
- package/dist/script/postman/modules.js +114 -0
- package/dist/script/postman/modules.js.map +1 -0
- package/dist/script/postman/proxies.d.ts +13 -0
- package/dist/script/postman/proxies.d.ts.map +1 -0
- package/dist/script/postman/proxies.js +88 -0
- package/dist/script/postman/proxies.js.map +1 -0
- package/dist/script/postman/requestAdapter.d.ts +7 -0
- package/dist/script/postman/requestAdapter.d.ts.map +1 -0
- package/dist/script/postman/requestAdapter.js +223 -0
- package/dist/script/postman/requestAdapter.js.map +1 -0
- package/dist/script/postman/responseAdapter.d.ts +5 -0
- package/dist/script/postman/responseAdapter.d.ts.map +1 -0
- package/dist/script/postman/responseAdapter.js +78 -0
- package/dist/script/postman/responseAdapter.js.map +1 -0
- package/dist/script/postman/runtime.d.ts +22 -0
- package/dist/script/postman/runtime.d.ts.map +1 -0
- package/dist/script/postman/runtime.js +122 -0
- package/dist/script/postman/runtime.js.map +1 -0
- package/dist/script/scope.d.ts +5 -1
- package/dist/script/scope.d.ts.map +1 -1
- package/dist/script/scope.js +47 -5
- package/dist/script/scope.js.map +1 -1
- package/dist/script/types.d.ts +42 -14
- package/dist/script/types.d.ts.map +1 -1
- package/dist/script/worker-entry.js +9 -0
- package/dist/script/worker-entry.js.map +1 -1
- package/dist/script/worker-pool.d.ts +3 -1
- package/dist/script/worker-pool.d.ts.map +1 -1
- package/dist/script/worker-pool.js +23 -2
- package/dist/script/worker-pool.js.map +1 -1
- package/dist/templating/generator-metadata.d.ts +1 -0
- package/dist/templating/generator-metadata.d.ts.map +1 -1
- package/dist/templating/generator-metadata.js +14 -0
- package/dist/templating/generator-metadata.js.map +1 -1
- package/dist/templating/postman-dynamic-catalog.d.ts +7 -0
- package/dist/templating/postman-dynamic-catalog.d.ts.map +1 -0
- package/dist/templating/postman-dynamic-catalog.js +126 -0
- package/dist/templating/postman-dynamic-catalog.js.map +1 -0
- package/dist/templating/postman-generators.d.ts +9 -0
- package/dist/templating/postman-generators.d.ts.map +1 -1
- package/dist/templating/postman-generators.js +10 -1
- package/dist/templating/postman-generators.js.map +1 -1
- package/dist/types/index.d.ts +44 -2
- package/dist/types/index.d.ts.map +1 -1
- package/dist/variables/envStore.d.ts +3 -0
- package/dist/variables/envStore.d.ts.map +1 -1
- package/dist/variables/envStore.js +5 -0
- package/dist/variables/envStore.js.map +1 -1
- package/dist/variables/replaceIn.d.ts +10 -0
- package/dist/variables/replaceIn.d.ts.map +1 -0
- package/dist/variables/replaceIn.js +106 -0
- package/dist/variables/replaceIn.js.map +1 -0
- package/dist/variables/resolver.d.ts.map +1 -1
- package/dist/variables/resolver.js +16 -2
- package/dist/variables/resolver.js.map +1 -1
- package/dist-cjs/ai/prompts/fragments.js +0 -1
- package/dist-cjs/ai/prompts/fragments.js.map +1 -1
- package/dist-cjs/ai/prompts/unified.js +1 -1
- package/dist-cjs/ai/prompts/unified.js.map +1 -1
- package/dist-cjs/ai/types.js +1 -1
- package/dist-cjs/ai/types.js.map +1 -1
- package/dist-cjs/index.js +23 -5
- package/dist-cjs/index.js.map +1 -1
- package/dist-cjs/runner/requestRunner.js +339 -1
- package/dist-cjs/runner/requestRunner.js.map +1 -1
- package/dist-cjs/runner/runCollection.js +60 -7
- package/dist-cjs/runner/runCollection.js.map +1 -1
- package/dist-cjs/runner/runRequestWithDataset.js +5 -0
- package/dist-cjs/runner/runRequestWithDataset.js.map +1 -1
- package/dist-cjs/scenario-runner/adapters/request-executor.js +7 -0
- package/dist-cjs/scenario-runner/adapters/request-executor.js.map +1 -1
- package/dist-cjs/scenario-runner/runScenario.js +4 -0
- package/dist-cjs/scenario-runner/runScenario.js.map +1 -1
- package/dist-cjs/script/chain.js +126 -0
- package/dist-cjs/script/chain.js.map +1 -0
- package/dist-cjs/script/errors.js +6 -4
- package/dist-cjs/script/errors.js.map +1 -1
- package/dist-cjs/script/executor.js +298 -64
- package/dist-cjs/script/executor.js.map +1 -1
- package/dist-cjs/script/features/collectionVariables.js +20 -11
- package/dist-cjs/script/features/collectionVariables.js.map +1 -1
- package/dist-cjs/script/features/environment.js +20 -11
- package/dist-cjs/script/features/environment.js.map +1 -1
- package/dist-cjs/script/features/feature-policy.js +2 -2
- package/dist-cjs/script/features/feature-policy.js.map +1 -1
- package/dist-cjs/script/features/info.js +6 -3
- package/dist-cjs/script/features/info.js.map +1 -1
- package/dist-cjs/script/features/iterationData.js +32 -0
- package/dist-cjs/script/features/iterationData.js.map +1 -0
- package/dist-cjs/script/features/legacyPostman.js +112 -0
- package/dist-cjs/script/features/legacyPostman.js.map +1 -0
- package/dist-cjs/script/features/log.js +347 -28
- package/dist-cjs/script/features/log.js.map +1 -1
- package/dist-cjs/script/features/tests.js +90 -64
- package/dist-cjs/script/features/tests.js.map +1 -1
- package/dist-cjs/script/features/timers.js +17 -5
- package/dist-cjs/script/features/timers.js.map +1 -1
- package/dist-cjs/script/features/variables.js +26 -9
- package/dist-cjs/script/features/variables.js.map +1 -1
- package/dist-cjs/script/features/visualizer.js +56 -0
- package/dist-cjs/script/features/visualizer.js.map +1 -0
- package/dist-cjs/script/isolated-runner.js +26 -2
- package/dist-cjs/script/isolated-runner.js.map +1 -1
- package/dist-cjs/script/layers.js +57 -0
- package/dist-cjs/script/layers.js.map +1 -0
- package/dist-cjs/script/legacy.js +20 -6
- package/dist-cjs/script/legacy.js.map +1 -1
- package/dist-cjs/script/pm-api-declarations.js +1969 -0
- package/dist-cjs/script/pm-api-declarations.js.map +1 -0
- package/dist-cjs/script/pm-api-metadata.js +336 -106
- package/dist-cjs/script/pm-api-metadata.js.map +1 -1
- package/dist-cjs/script/pm-api-reference.js +32 -7
- package/dist-cjs/script/pm-api-reference.js.map +1 -1
- package/dist-cjs/script/postman/chaiCompat.js +181 -0
- package/dist-cjs/script/postman/chaiCompat.js.map +1 -0
- package/dist-cjs/script/postman/cookies.js +170 -0
- package/dist-cjs/script/postman/cookies.js.map +1 -0
- package/dist-cjs/script/postman/modules.js +123 -0
- package/dist-cjs/script/postman/modules.js.map +1 -0
- package/dist-cjs/script/postman/proxies.js +93 -0
- package/dist-cjs/script/postman/proxies.js.map +1 -0
- package/dist-cjs/script/postman/requestAdapter.js +227 -0
- package/dist-cjs/script/postman/requestAdapter.js.map +1 -0
- package/dist-cjs/script/postman/responseAdapter.js +83 -0
- package/dist-cjs/script/postman/responseAdapter.js.map +1 -0
- package/dist-cjs/script/postman/runtime.js +132 -0
- package/dist-cjs/script/postman/runtime.js.map +1 -0
- package/dist-cjs/script/scope.js +47 -5
- package/dist-cjs/script/scope.js.map +1 -1
- package/dist-cjs/script/worker-entry.js +9 -0
- package/dist-cjs/script/worker-entry.js.map +1 -1
- package/dist-cjs/script/worker-pool.js +23 -2
- package/dist-cjs/script/worker-pool.js.map +1 -1
- package/dist-cjs/templating/generator-metadata.js +15 -1
- package/dist-cjs/templating/generator-metadata.js.map +1 -1
- package/dist-cjs/templating/postman-dynamic-catalog.js +129 -0
- package/dist-cjs/templating/postman-dynamic-catalog.js.map +1 -0
- package/dist-cjs/templating/postman-generators.js +13 -3
- package/dist-cjs/templating/postman-generators.js.map +1 -1
- package/dist-cjs/variables/envStore.js +5 -0
- package/dist-cjs/variables/envStore.js.map +1 -1
- package/dist-cjs/variables/replaceIn.js +111 -0
- package/dist-cjs/variables/replaceIn.js.map +1 -0
- package/dist-cjs/variables/resolver.js +16 -2
- package/dist-cjs/variables/resolver.js.map +1 -1
- package/package.json +12 -2
|
@@ -2,20 +2,11 @@
|
|
|
2
2
|
// pm.test collector — runs each callback as a fire-and-forget Promise that
|
|
3
3
|
// resolves to PASS/FAIL/SKIP and surfaces the result via `flush()`.
|
|
4
4
|
//
|
|
5
|
-
//
|
|
6
|
-
//
|
|
7
|
-
// the set actually execute. Used for kafka-deferred re-runs where the
|
|
8
|
-
// caller wants to retry only previously-pending tests.
|
|
9
|
-
// 2. allowDeferredKafkaTests — when true, a thrown
|
|
10
|
-
// PendingKafkaDependencyError is caught and routed to deferredTestNames
|
|
11
|
-
// (instead of being recorded as a FAIL). The caller re-invokes the
|
|
12
|
-
// script later with kafka data populated.
|
|
13
|
-
// 3. DisabledFeatureDependencyError is recognized regardless and produces
|
|
14
|
-
// a SKIP test result with a descriptive error message.
|
|
5
|
+
// DisabledFeatureDependencyError is recognized and produces a SKIP test
|
|
6
|
+
// result with a descriptive error message.
|
|
15
7
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
8
|
exports.buildTestCollector = void 0;
|
|
17
9
|
const feature_policy_js_1 = require("./feature-policy.js");
|
|
18
|
-
const kafka_js_1 = require("./kafka.js");
|
|
19
10
|
// Errors thrown inside the vm context cross a realm boundary, which means
|
|
20
11
|
// `error instanceof Error` from the host's perspective is FALSE even when
|
|
21
12
|
// the value has a real .message property. Read the message structurally
|
|
@@ -33,7 +24,7 @@ const extractErrorMessage = (error) => {
|
|
|
33
24
|
return String(error);
|
|
34
25
|
};
|
|
35
26
|
// Cross-realm error name extraction — used to recognize symbolically named
|
|
36
|
-
// errors
|
|
27
|
+
// errors (DisabledFeatureDependencyError) that may arrive as cross-realm
|
|
37
28
|
// values failing instanceof checks.
|
|
38
29
|
const extractErrorName = (error) => {
|
|
39
30
|
if (error instanceof Error) {
|
|
@@ -47,17 +38,13 @@ const extractErrorName = (error) => {
|
|
|
47
38
|
}
|
|
48
39
|
return "";
|
|
49
40
|
};
|
|
50
|
-
const isPendingKafkaError = (error) => error instanceof kafka_js_1.PendingKafkaDependencyError ||
|
|
51
|
-
extractErrorName(error) === "PendingKafkaDependencyError";
|
|
52
41
|
const isDisabledFeatureError = (error) => {
|
|
53
42
|
if (error instanceof feature_policy_js_1.DisabledFeatureDependencyError) {
|
|
54
43
|
return { feature: error.feature };
|
|
55
44
|
}
|
|
56
45
|
if (extractErrorName(error) === "DisabledFeatureDependencyError") {
|
|
57
46
|
const feature = error.feature;
|
|
58
|
-
|
|
59
|
-
return { feature };
|
|
60
|
-
}
|
|
47
|
+
void feature;
|
|
61
48
|
return { feature: "database" };
|
|
62
49
|
}
|
|
63
50
|
return null;
|
|
@@ -66,70 +53,110 @@ const normalizeName = (name) => {
|
|
|
66
53
|
const trimmed = String(name ?? "").trim();
|
|
67
54
|
return trimmed || "Unnamed test";
|
|
68
55
|
};
|
|
69
|
-
const buildTestCollector = (_stage,
|
|
56
|
+
const buildTestCollector = (_stage, _options = {}) => {
|
|
70
57
|
const orderedResults = [];
|
|
71
58
|
const finalResults = [];
|
|
72
|
-
const deferredTestNames = [];
|
|
73
59
|
const pending = [];
|
|
74
|
-
const selected = options.selectedTestNames ? new Set(options.selectedTestNames) : null;
|
|
75
60
|
let activeCallbackCount = 0;
|
|
76
|
-
const
|
|
61
|
+
const record = (index, name, error) => {
|
|
62
|
+
const disabled = isDisabledFeatureError(error);
|
|
63
|
+
if (disabled) {
|
|
64
|
+
orderedResults[index] = {
|
|
65
|
+
name,
|
|
66
|
+
status: "SKIP",
|
|
67
|
+
error: "Skipped because database execution is disabled for this collection runner.",
|
|
68
|
+
};
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
orderedResults[index] = {
|
|
72
|
+
name,
|
|
73
|
+
status: "FAIL",
|
|
74
|
+
error: extractErrorMessage(error),
|
|
75
|
+
};
|
|
76
|
+
};
|
|
77
|
+
const isThenable = (value) => value !== null &&
|
|
78
|
+
(typeof value === "object" || typeof value === "function") &&
|
|
79
|
+
typeof value.then === "function";
|
|
80
|
+
// Postman runs the callback SYNCHRONOUSLY at the pm.test() call, so code
|
|
81
|
+
// after it observes whatever the test did; an async callback (returns a
|
|
82
|
+
// Promise) or a `done` callback (`function (done) {…}`) is tracked and
|
|
83
|
+
// awaited at flush time. The result keeps the call order either way.
|
|
84
|
+
const test = ((name, fn) => {
|
|
77
85
|
const normalizedName = normalizeName(name);
|
|
78
|
-
|
|
86
|
+
const resultIndex = orderedResults.push(null) - 1;
|
|
87
|
+
const pass = () => {
|
|
88
|
+
orderedResults[resultIndex] = { name: normalizedName, status: "PASS" };
|
|
89
|
+
};
|
|
90
|
+
if (typeof fn !== "function") {
|
|
91
|
+
record(resultIndex, normalizedName, new Error("pm.test requires a callback function"));
|
|
79
92
|
return Promise.resolve();
|
|
80
93
|
}
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
if (
|
|
85
|
-
|
|
94
|
+
activeCallbackCount += 1;
|
|
95
|
+
let task;
|
|
96
|
+
try {
|
|
97
|
+
if (fn.length > 0) {
|
|
98
|
+
// done-callback style.
|
|
99
|
+
task = new Promise((resolve) => {
|
|
100
|
+
let finished = false;
|
|
101
|
+
const done = (error) => {
|
|
102
|
+
if (finished)
|
|
103
|
+
return;
|
|
104
|
+
finished = true;
|
|
105
|
+
activeCallbackCount = Math.max(0, activeCallbackCount - 1);
|
|
106
|
+
if (error) {
|
|
107
|
+
record(resultIndex, normalizedName, error);
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
pass();
|
|
111
|
+
}
|
|
112
|
+
resolve();
|
|
113
|
+
};
|
|
114
|
+
try {
|
|
115
|
+
fn(done);
|
|
116
|
+
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
done(error ?? new Error("Test failed"));
|
|
119
|
+
}
|
|
120
|
+
});
|
|
86
121
|
}
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
122
|
+
else {
|
|
123
|
+
const out = fn();
|
|
124
|
+
if (isThenable(out)) {
|
|
125
|
+
task = Promise.resolve(out).then(() => {
|
|
126
|
+
activeCallbackCount = Math.max(0, activeCallbackCount - 1);
|
|
127
|
+
pass();
|
|
128
|
+
}, (error) => {
|
|
129
|
+
activeCallbackCount = Math.max(0, activeCallbackCount - 1);
|
|
130
|
+
record(resultIndex, normalizedName, error);
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
activeCallbackCount = Math.max(0, activeCallbackCount - 1);
|
|
135
|
+
pass();
|
|
136
|
+
task = Promise.resolve();
|
|
137
|
+
}
|
|
90
138
|
}
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
};
|
|
98
|
-
})
|
|
99
|
-
.catch((error) => {
|
|
100
|
-
const disabled = isDisabledFeatureError(error);
|
|
101
|
-
if (disabled) {
|
|
102
|
-
orderedResults[resultIndex] = {
|
|
103
|
-
name: normalizedName,
|
|
104
|
-
status: "SKIP",
|
|
105
|
-
error: disabled.feature === "database"
|
|
106
|
-
? "Skipped because database execution is disabled for this collection runner."
|
|
107
|
-
: "Skipped because Kafka execution is disabled for this collection runner.",
|
|
108
|
-
};
|
|
109
|
-
return;
|
|
110
|
-
}
|
|
111
|
-
if (options.allowDeferredKafkaTests && isPendingKafkaError(error)) {
|
|
112
|
-
orderedResults[resultIndex] = null;
|
|
113
|
-
deferredTestNames.push(normalizedName);
|
|
114
|
-
return;
|
|
115
|
-
}
|
|
116
|
-
orderedResults[resultIndex] = {
|
|
117
|
-
name: normalizedName,
|
|
118
|
-
status: "FAIL",
|
|
119
|
-
error: extractErrorMessage(error),
|
|
120
|
-
};
|
|
121
|
-
});
|
|
139
|
+
}
|
|
140
|
+
catch (error) {
|
|
141
|
+
activeCallbackCount = Math.max(0, activeCallbackCount - 1);
|
|
142
|
+
record(resultIndex, normalizedName, error);
|
|
143
|
+
task = Promise.resolve();
|
|
144
|
+
}
|
|
122
145
|
pending.push(task);
|
|
123
146
|
return task;
|
|
124
|
-
};
|
|
147
|
+
});
|
|
148
|
+
// pm.test.skip(name[, fn]) — recorded as SKIP, the callback never runs.
|
|
125
149
|
const skip = (name, reason) => {
|
|
126
150
|
const result = {
|
|
127
151
|
name: normalizeName(name),
|
|
128
152
|
status: "SKIP",
|
|
129
|
-
...(reason ? { error: reason } : {}),
|
|
153
|
+
...(typeof reason === "string" && reason ? { error: reason } : {}),
|
|
130
154
|
};
|
|
131
155
|
orderedResults.push(result);
|
|
132
156
|
};
|
|
157
|
+
// pm.test.index() — how many tests the script has recorded so far.
|
|
158
|
+
const index = () => orderedResults.length;
|
|
159
|
+
Object.assign(test, { skip, index });
|
|
133
160
|
const flush = async () => {
|
|
134
161
|
await Promise.allSettled(pending);
|
|
135
162
|
for (const entry of orderedResults) {
|
|
@@ -142,7 +169,6 @@ const buildTestCollector = (_stage, options = {}) => {
|
|
|
142
169
|
test,
|
|
143
170
|
skip,
|
|
144
171
|
testResults: finalResults,
|
|
145
|
-
deferredTestNames,
|
|
146
172
|
flush,
|
|
147
173
|
isInsideCallback: () => activeCallbackCount > 0,
|
|
148
174
|
};
|
|
@@ -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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"}
|
|
@@ -32,7 +32,7 @@ const clampDelay = (raw) => {
|
|
|
32
32
|
return 0;
|
|
33
33
|
return Math.min(n, MAX_TIMER_DELAY_MS);
|
|
34
34
|
};
|
|
35
|
-
const buildTimerFeature = () => {
|
|
35
|
+
const buildTimerFeature = (onError) => {
|
|
36
36
|
const handles = new Map();
|
|
37
37
|
let nextId = 1;
|
|
38
38
|
let totalCreated = 0;
|
|
@@ -86,8 +86,13 @@ const buildTimerFeature = () => {
|
|
|
86
86
|
// to the executor's catch via Promise rejection. A timer
|
|
87
87
|
// callback that throws after the script's main promise has
|
|
88
88
|
// resolved is logged but doesn't blow up the host.
|
|
89
|
-
|
|
90
|
-
|
|
89
|
+
if (onError) {
|
|
90
|
+
onError("timeout", error);
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
// eslint-disable-next-line no-console
|
|
94
|
+
console.error("Script timer callback threw:", error);
|
|
95
|
+
}
|
|
91
96
|
}
|
|
92
97
|
}, ms);
|
|
93
98
|
handles.set(id, { hostId, kind: "timeout" });
|
|
@@ -121,8 +126,13 @@ const buildTimerFeature = () => {
|
|
|
121
126
|
handler(...args);
|
|
122
127
|
}
|
|
123
128
|
catch (error) {
|
|
124
|
-
|
|
125
|
-
|
|
129
|
+
if (onError) {
|
|
130
|
+
onError("interval", error);
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
// eslint-disable-next-line no-console
|
|
134
|
+
console.error("Script interval callback threw:", error);
|
|
135
|
+
}
|
|
126
136
|
}
|
|
127
137
|
}, ms);
|
|
128
138
|
handles.set(id, { hostId, kind: "interval" });
|
|
@@ -136,6 +146,8 @@ const buildTimerFeature = () => {
|
|
|
136
146
|
return;
|
|
137
147
|
clear(numeric);
|
|
138
148
|
},
|
|
149
|
+
setImmediate: (handler, ...args) => api.setTimeout(handler, 0, ...args),
|
|
150
|
+
clearImmediate: (id) => api.clearTimeout(id),
|
|
139
151
|
};
|
|
140
152
|
const dispose = () => {
|
|
141
153
|
if (disposed)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timers.js","sourceRoot":"","sources":["../../../src/script/features/timers.ts"],"names":[],"mappings":";AAAA,2DAA2D;AAC3D,qEAAqE;AACrE,gDAAgD;AAChD,EAAE;AACF,kDAAkD;AAClD,gDAAgD;AAChD,qEAAqE;AACrE,qEAAqE;AACrE,iEAAiE;AACjE,+CAA+C;AAC/C,EAAE;AACF,kDAAkD;AAClD,sCAAsC;AACtC,oEAAoE;AACpE,8BAA8B;AAC9B,qEAAqE;AACrE,8DAA8D;AAC9D,mEAAmE;AACnE,+DAA+D;AAC/D,EAAE;AACF,qEAAqE;AACrE,uEAAuE;AACvE,gCAAgC;;;AAEhC,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAClC,MAAM,mBAAmB,GAAG,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"timers.js","sourceRoot":"","sources":["../../../src/script/features/timers.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
19
|
exports.buildVariablesApi = void 0;
|
|
20
20
|
const resolver_js_1 = require("../../variables/resolver.js");
|
|
21
|
+
const replaceIn_js_1 = require("../../variables/replaceIn.js");
|
|
21
22
|
const stringifyInput = (value) => {
|
|
22
23
|
if (value === undefined || value === null) {
|
|
23
24
|
return "";
|
|
@@ -28,15 +29,22 @@ const buildVariablesApi = (environment, globals, options = {}) => {
|
|
|
28
29
|
// Local (request-scoped) overlay. Writes via `pm.variables.set` land
|
|
29
30
|
// here so they take precedence over env / globals for subsequent reads
|
|
30
31
|
// in the same script execution, without polluting persistent state.
|
|
31
|
-
const local = {};
|
|
32
|
+
const local = { ...(options.local ?? {}) };
|
|
33
|
+
// Values as the script wrote them (numbers, objects…) — `get` returns them
|
|
34
|
+
// unchanged inside the run; `local` is the string form handed back to hosts.
|
|
35
|
+
const localNative = {};
|
|
32
36
|
const collection = options.collectionVariables ?? {};
|
|
33
|
-
|
|
34
|
-
//
|
|
37
|
+
const iteration = options.iterationData ?? {};
|
|
38
|
+
// Precedence on read: local > environment > collection > globals —
|
|
39
|
+
// Postman's documented order.
|
|
40
|
+
const live = options.live ?? {};
|
|
35
41
|
const readMerged = () => ({
|
|
36
|
-
...globals,
|
|
37
|
-
...
|
|
38
|
-
...
|
|
42
|
+
...(live.globals ? live.globals() : globals),
|
|
43
|
+
...(live.collection ? live.collection() : collection),
|
|
44
|
+
...(live.environment ? live.environment() : environment),
|
|
45
|
+
...iteration,
|
|
39
46
|
...local,
|
|
47
|
+
...localNative,
|
|
40
48
|
});
|
|
41
49
|
const resolve = (input) => (0, resolver_js_1.resolveTemplate)(stringifyInput(input), { env: readMerged() });
|
|
42
50
|
return {
|
|
@@ -54,21 +62,30 @@ const buildVariablesApi = (environment, globals, options = {}) => {
|
|
|
54
62
|
const merged = readMerged();
|
|
55
63
|
return merged[normalisedKey];
|
|
56
64
|
},
|
|
57
|
-
set: (key, value) => {
|
|
65
|
+
set: (key, value, _type) => {
|
|
58
66
|
const normalisedKey = String(key ?? "").trim();
|
|
59
67
|
if (!normalisedKey)
|
|
60
68
|
return;
|
|
61
|
-
local[normalisedKey] = stringifyInput(value);
|
|
69
|
+
local[normalisedKey] = typeof value === "object" && value !== null ? JSON.stringify(value) : stringifyInput(value);
|
|
70
|
+
localNative[normalisedKey] = value;
|
|
62
71
|
},
|
|
63
72
|
unset: (key) => {
|
|
64
73
|
const normalisedKey = String(key ?? "").trim();
|
|
65
74
|
if (!normalisedKey)
|
|
66
75
|
return;
|
|
67
76
|
delete local[normalisedKey];
|
|
77
|
+
delete localNative[normalisedKey];
|
|
78
|
+
},
|
|
79
|
+
clear: () => {
|
|
80
|
+
for (const key of Object.keys(local))
|
|
81
|
+
delete local[key];
|
|
82
|
+
for (const key of Object.keys(localNative))
|
|
83
|
+
delete localNative[key];
|
|
68
84
|
},
|
|
69
85
|
toObject: () => readMerged(),
|
|
70
86
|
resolve,
|
|
71
|
-
replaceIn:
|
|
87
|
+
replaceIn: (input) => (0, replaceIn_js_1.replaceInValue)(input, (0, replaceIn_js_1.lookupInRecords)(readMerged())),
|
|
88
|
+
localSnapshot: () => ({ ...local }),
|
|
72
89
|
};
|
|
73
90
|
};
|
|
74
91
|
exports.buildVariablesApi = buildVariablesApi;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"variables.js","sourceRoot":"","sources":["../../../src/script/features/variables.ts"],"names":[],"mappings":";AAAA,oDAAoD;AACpD,EAAE;AACF,oCAAoC;AACpC,uEAAuE;AACvE,mEAAmE;AACnE,wEAAwE;AACxE,2EAA2E;AAC3E,yDAAyD;AACzD,2EAA2E;AAC3E,wEAAwE;AACxE,0EAA0E;AAC1E,EAAE;AACF,uEAAuE;AACvE,uEAAuE;AACvE,qEAAqE;AACrE,0CAA0C;;;AAE1C,6DAA8D;
|
|
1
|
+
{"version":3,"file":"variables.js","sourceRoot":"","sources":["../../../src/script/features/variables.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// pm.visualizer — Postman's "Visualize" hook. A post-response/test script
|
|
3
|
+
// calls `pm.visualizer.set(template, data, options)` with a Handlebars HTML
|
|
4
|
+
// template and its data; the HOST renders the template (sandboxed) in a
|
|
5
|
+
// Visualize tab. Inside a visualizer template, `pm.getData(cb)` hands the data
|
|
6
|
+
// back to the template's own script — that part runs in the host's renderer,
|
|
7
|
+
// here `pm.getData` only exists so a copied script does not throw.
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.buildVisualizerFeature = void 0;
|
|
10
|
+
const MAX_TEMPLATE_BYTES = 2 * 1024 * 1024;
|
|
11
|
+
const cloneJson = (value) => {
|
|
12
|
+
if (value === undefined)
|
|
13
|
+
return undefined;
|
|
14
|
+
try {
|
|
15
|
+
return JSON.parse(JSON.stringify(value));
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
throw new Error("pm.visualizer.set: data must be JSON-serializable");
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
const buildVisualizerFeature = () => {
|
|
22
|
+
let current;
|
|
23
|
+
return {
|
|
24
|
+
api: {
|
|
25
|
+
set: (template, data, options) => {
|
|
26
|
+
if (typeof template !== "string") {
|
|
27
|
+
throw new TypeError("pm.visualizer.set: template must be a string");
|
|
28
|
+
}
|
|
29
|
+
if (data !== undefined && (data === null || typeof data !== "object")) {
|
|
30
|
+
throw new TypeError("pm.visualizer.set: data must be an object");
|
|
31
|
+
}
|
|
32
|
+
if (options !== undefined && (options === null || typeof options !== "object")) {
|
|
33
|
+
throw new TypeError("pm.visualizer.set: options must be an object");
|
|
34
|
+
}
|
|
35
|
+
if (template.length > MAX_TEMPLATE_BYTES) {
|
|
36
|
+
throw new RangeError("pm.visualizer.set: template is too large (2 MB limit)");
|
|
37
|
+
}
|
|
38
|
+
current = {
|
|
39
|
+
template,
|
|
40
|
+
data: cloneJson(data) ?? {},
|
|
41
|
+
options: cloneJson(options) ?? {},
|
|
42
|
+
};
|
|
43
|
+
},
|
|
44
|
+
clear: () => {
|
|
45
|
+
current = undefined;
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
getData: (callback) => {
|
|
49
|
+
if (typeof callback === "function")
|
|
50
|
+
callback(null, current?.data ?? {});
|
|
51
|
+
},
|
|
52
|
+
payload: () => current,
|
|
53
|
+
};
|
|
54
|
+
};
|
|
55
|
+
exports.buildVisualizerFeature = buildVisualizerFeature;
|
|
56
|
+
//# sourceMappingURL=visualizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"visualizer.js","sourceRoot":"","sources":["../../../src/script/features/visualizer.ts"],"names":[],"mappings":";AAAA,0EAA0E;AAC1E,4EAA4E;AAC5E,wEAAwE;AACxE,+EAA+E;AAC/E,6EAA6E;AAC7E,mEAAmE;;;AAiBnE,MAAM,kBAAkB,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;AAE3C,MAAM,SAAS,GAAG,CAAC,KAAc,EAAW,EAAE;IAC5C,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IACvE,CAAC;AACH,CAAC,CAAC;AAEK,MAAM,sBAAsB,GAAG,GAAsB,EAAE;IAC5D,IAAI,OAA4C,CAAC;IACjD,OAAO;QACL,GAAG,EAAE;YACH,GAAG,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;gBAC/B,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;oBACjC,MAAM,IAAI,SAAS,CAAC,8CAA8C,CAAC,CAAC;gBACtE,CAAC;gBACD,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,CAAC,EAAE,CAAC;oBACtE,MAAM,IAAI,SAAS,CAAC,2CAA2C,CAAC,CAAC;gBACnE,CAAC;gBACD,IAAI,OAAO,KAAK,SAAS,IAAI,CAAC,OAAO,KAAK,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ,CAAC,EAAE,CAAC;oBAC/E,MAAM,IAAI,SAAS,CAAC,8CAA8C,CAAC,CAAC;gBACtE,CAAC;gBACD,IAAI,QAAQ,CAAC,MAAM,GAAG,kBAAkB,EAAE,CAAC;oBACzC,MAAM,IAAI,UAAU,CAAC,uDAAuD,CAAC,CAAC;gBAChF,CAAC;gBACD,OAAO,GAAG;oBACR,QAAQ;oBACR,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE;oBAC3B,OAAO,EAAG,SAAS,CAAC,OAAO,CAAyC,IAAI,EAAE;iBAC3E,CAAC;YACJ,CAAC;YACD,KAAK,EAAE,GAAG,EAAE;gBACV,OAAO,GAAG,SAAS,CAAC;YACtB,CAAC;SACF;QACD,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAE;YACpB,IAAI,OAAO,QAAQ,KAAK,UAAU;gBAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;QAC1E,CAAC;QACD,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO;KACvB,CAAC;AACJ,CAAC,CAAC;AAhCW,QAAA,sBAAsB,0BAgCjC"}
|
|
@@ -72,8 +72,13 @@ const toWorkerCapabilities = (capabilities) => {
|
|
|
72
72
|
const extensions = capabilities.extensions ?? {};
|
|
73
73
|
return {
|
|
74
74
|
...capabilities,
|
|
75
|
+
// The jar is a set of functions — workers get the cookie snapshot only and
|
|
76
|
+
// fall back to the in-memory jar.
|
|
77
|
+
cookies: capabilities.cookies?.snapshot ? { snapshot: capabilities.cookies.snapshot } : undefined,
|
|
75
78
|
extensions: {
|
|
76
|
-
|
|
79
|
+
// `{ onEntry }` carries a function — the worker always streams entries
|
|
80
|
+
// back over the port instead, the host re-emits them to `onEntry`.
|
|
81
|
+
log: extensions.log ? true : extensions.log,
|
|
77
82
|
node: extensions.node,
|
|
78
83
|
cryptojs: extensions.cryptojs,
|
|
79
84
|
variables: extensions.variables,
|
|
@@ -123,10 +128,13 @@ const runScriptIsolated = async (input, options = {}) => {
|
|
|
123
128
|
...input,
|
|
124
129
|
capabilities: (0, exports.toWorkerCapabilities)(input.capabilities),
|
|
125
130
|
};
|
|
131
|
+
const logOption = input.capabilities.extensions?.log;
|
|
132
|
+
const onLog = options.onLog ?? (typeof logOption === "object" && logOption ? logOption.onEntry : undefined);
|
|
126
133
|
if (options.pool) {
|
|
127
134
|
return options.pool.run(workerInput, {
|
|
128
135
|
onSendRequest: options.onSendRequest,
|
|
129
136
|
signal: options.signal,
|
|
137
|
+
onLog,
|
|
130
138
|
});
|
|
131
139
|
}
|
|
132
140
|
// Lazy node-builtin imports — only reached in the CJS Node hosts, never in
|
|
@@ -137,11 +145,15 @@ const runScriptIsolated = async (input, options = {}) => {
|
|
|
137
145
|
return await new Promise((resolve) => {
|
|
138
146
|
let settled = false;
|
|
139
147
|
let worker;
|
|
140
|
-
const
|
|
148
|
+
const streamedLogs = [];
|
|
149
|
+
const finish = (rawResult) => {
|
|
141
150
|
if (settled) {
|
|
142
151
|
return;
|
|
143
152
|
}
|
|
144
153
|
settled = true;
|
|
154
|
+
const result = !rawResult.success && rawResult.logs.length === 0 && streamedLogs.length > 0
|
|
155
|
+
? { ...rawResult, logs: streamedLogs }
|
|
156
|
+
: rawResult;
|
|
145
157
|
clearTimeout(killTimer);
|
|
146
158
|
options.signal?.removeEventListener?.("abort", onAbort);
|
|
147
159
|
void worker?.terminate();
|
|
@@ -176,6 +188,18 @@ const runScriptIsolated = async (input, options = {}) => {
|
|
|
176
188
|
finish(message.result);
|
|
177
189
|
return;
|
|
178
190
|
}
|
|
191
|
+
if (message.type === "log") {
|
|
192
|
+
const entry = message.entry;
|
|
193
|
+
if (streamedLogs.length < 1001)
|
|
194
|
+
streamedLogs.push(entry);
|
|
195
|
+
try {
|
|
196
|
+
onLog?.(entry);
|
|
197
|
+
}
|
|
198
|
+
catch {
|
|
199
|
+
// a broken sink must not affect the script
|
|
200
|
+
}
|
|
201
|
+
return;
|
|
202
|
+
}
|
|
179
203
|
if (message.type === "sendRequest") {
|
|
180
204
|
const id = message.id;
|
|
181
205
|
const requestInput = message.input;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"isolated-runner.js","sourceRoot":"","sources":["../../src/script/isolated-runner.ts"],"names":[],"mappings":";AAAA,iCAAiC;AACjC,EAAE;AACF,0EAA0E;AAC1E,8EAA8E;AAC9E,gFAAgF;AAChF,gFAAgF;AAChF,gFAAgF;AAChF,+EAA+E;AAC/E,EAAE;AACF,sEAAsE;AACtE,6EAA6E;AAC7E,gFAAgF;AAChF,8DAA8D;AAC9D,EAAE;AACF,4EAA4E;AAC5E,yEAAyE;AACzE,6EAA6E;AAC7E,8DAA8D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAE9D,4EAA4E;AAC5E,gFAAgF;AAChF,8EAA8E;AAC9E,8EAA8E;AAC9E,6EAA6E;AAC7E,iDAAiD;AACjD,+CAA8C;AAC9C,2CAAkD;
|
|
1
|
+
{"version":3,"file":"isolated-runner.js","sourceRoot":"","sources":["../../src/script/isolated-runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Collection- and folder-level scripts ("layers").
|
|
3
|
+
//
|
|
4
|
+
// Postman runs a collection's scripts and every enclosing folder's scripts
|
|
5
|
+
// around each request, in addition to — never instead of — the request's own:
|
|
6
|
+
//
|
|
7
|
+
// pre-request: collection → folder (root → leaf) → request
|
|
8
|
+
// post-response: collection → folder (root → leaf) → request
|
|
9
|
+
// tests: collection → folder (root → leaf) → request
|
|
10
|
+
//
|
|
11
|
+
// `buildScriptLayers` turns a collection, its folders and a request's folder
|
|
12
|
+
// into that ordered chain. Every host (desktop, runner, CLI, MCP) calls this
|
|
13
|
+
// one helper so the order can never drift between them.
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.describeScriptLayer = exports.buildScriptLayers = void 0;
|
|
16
|
+
const hasAnyScript = (scripts) => Boolean(scripts?.preRequest?.trim() || scripts?.postResponse?.trim() || scripts?.tests?.trim());
|
|
17
|
+
const toLayer = (scope, source) => ({
|
|
18
|
+
scope,
|
|
19
|
+
...(source.id ? { id: source.id } : {}),
|
|
20
|
+
name: source.name,
|
|
21
|
+
preRequestScript: source.scripts?.preRequest ?? "",
|
|
22
|
+
postResponseScript: source.scripts?.postResponse ?? "",
|
|
23
|
+
testsScript: source.scripts?.tests ?? "",
|
|
24
|
+
});
|
|
25
|
+
/**
|
|
26
|
+
* The inherited layers for a request in `folderId` (or at the collection root
|
|
27
|
+
* when it is null/unknown), outermost first. Levels without any script are
|
|
28
|
+
* left out. Never includes the request itself.
|
|
29
|
+
*
|
|
30
|
+
* Defensive by design: a missing folder (moved / deleted mid-run) stops the
|
|
31
|
+
* walk at the collection, and a `parentId` cycle is cut instead of looping.
|
|
32
|
+
*/
|
|
33
|
+
const buildScriptLayers = (input) => {
|
|
34
|
+
const byId = new Map((input.folders ?? []).map((folder) => [folder.id, folder]));
|
|
35
|
+
const chain = [];
|
|
36
|
+
const seen = new Set();
|
|
37
|
+
let cursor = input.folderId ? byId.get(input.folderId) : undefined;
|
|
38
|
+
while (cursor && !seen.has(cursor.id)) {
|
|
39
|
+
seen.add(cursor.id);
|
|
40
|
+
chain.unshift(cursor);
|
|
41
|
+
cursor = cursor.parentId ? byId.get(cursor.parentId) : undefined;
|
|
42
|
+
}
|
|
43
|
+
const layers = [];
|
|
44
|
+
if (input.collection && hasAnyScript(input.collection.scripts)) {
|
|
45
|
+
layers.push(toLayer("collection", input.collection));
|
|
46
|
+
}
|
|
47
|
+
for (const folder of chain) {
|
|
48
|
+
if (hasAnyScript(folder.scripts))
|
|
49
|
+
layers.push(toLayer("folder", folder));
|
|
50
|
+
}
|
|
51
|
+
return layers;
|
|
52
|
+
};
|
|
53
|
+
exports.buildScriptLayers = buildScriptLayers;
|
|
54
|
+
/** "Collection · Auth" / "Folder · Orders" — the label hosts show for a layer. */
|
|
55
|
+
const describeScriptLayer = (layer) => `${layer.scope === "collection" ? "Collection" : "Folder"} · ${layer.name}`;
|
|
56
|
+
exports.describeScriptLayer = describeScriptLayer;
|
|
57
|
+
//# sourceMappingURL=layers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layers.js","sourceRoot":"","sources":["../../src/script/layers.ts"],"names":[],"mappings":"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"}
|