callman-core 1.7.1 → 1.8.1

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 (114) hide show
  1. package/dist/scenario-runner/runScenario.d.ts.map +1 -1
  2. package/dist/scenario-runner/runScenario.js +8 -0
  3. package/dist/scenario-runner/runScenario.js.map +1 -1
  4. package/dist/scenario-runner/templateResolver.d.ts.map +1 -1
  5. package/dist/scenario-runner/templateResolver.js +18 -0
  6. package/dist/scenario-runner/templateResolver.js.map +1 -1
  7. package/dist/scenario-runner/types.d.ts +1 -1
  8. package/dist/scenario-runner/types.d.ts.map +1 -1
  9. package/dist/script/executor.d.ts.map +1 -1
  10. package/dist/script/executor.js +75 -9
  11. package/dist/script/executor.js.map +1 -1
  12. package/dist/script/features/collectionVariables.d.ts +16 -0
  13. package/dist/script/features/collectionVariables.d.ts.map +1 -0
  14. package/dist/script/features/collectionVariables.js +83 -0
  15. package/dist/script/features/collectionVariables.js.map +1 -0
  16. package/dist/script/features/cryptojs.d.ts +8 -12
  17. package/dist/script/features/cryptojs.d.ts.map +1 -1
  18. package/dist/script/features/cryptojs.js +15 -99
  19. package/dist/script/features/cryptojs.js.map +1 -1
  20. package/dist/script/features/environment.d.ts +8 -1
  21. package/dist/script/features/environment.d.ts.map +1 -1
  22. package/dist/script/features/environment.js +25 -1
  23. package/dist/script/features/environment.js.map +1 -1
  24. package/dist/script/features/execution.d.ts +17 -0
  25. package/dist/script/features/execution.d.ts.map +1 -0
  26. package/dist/script/features/execution.js +60 -0
  27. package/dist/script/features/execution.js.map +1 -0
  28. package/dist/script/features/headerList.d.ts +44 -0
  29. package/dist/script/features/headerList.d.ts.map +1 -0
  30. package/dist/script/features/headerList.js +284 -0
  31. package/dist/script/features/headerList.js.map +1 -0
  32. package/dist/script/features/info.d.ts +10 -0
  33. package/dist/script/features/info.d.ts.map +1 -0
  34. package/dist/script/features/info.js +32 -0
  35. package/dist/script/features/info.js.map +1 -0
  36. package/dist/script/features/request.d.ts +3 -2
  37. package/dist/script/features/request.d.ts.map +1 -1
  38. package/dist/script/features/request.js +38 -29
  39. package/dist/script/features/request.js.map +1 -1
  40. package/dist/script/features/response.d.ts +7 -5
  41. package/dist/script/features/response.d.ts.map +1 -1
  42. package/dist/script/features/response.js +16 -8
  43. package/dist/script/features/response.js.map +1 -1
  44. package/dist/script/features/responseAssertions.d.ts +50 -0
  45. package/dist/script/features/responseAssertions.d.ts.map +1 -0
  46. package/dist/script/features/responseAssertions.js +293 -0
  47. package/dist/script/features/responseAssertions.js.map +1 -0
  48. package/dist/script/features/timers.d.ts +17 -0
  49. package/dist/script/features/timers.d.ts.map +1 -0
  50. package/dist/script/features/timers.js +152 -0
  51. package/dist/script/features/timers.js.map +1 -0
  52. package/dist/script/features/variables.d.ts +8 -1
  53. package/dist/script/features/variables.d.ts.map +1 -1
  54. package/dist/script/features/variables.js +57 -11
  55. package/dist/script/features/variables.js.map +1 -1
  56. package/dist/script/scope.d.ts +10 -0
  57. package/dist/script/scope.d.ts.map +1 -1
  58. package/dist/script/scope.js +13 -4
  59. package/dist/script/scope.js.map +1 -1
  60. package/dist/script/types.d.ts +51 -1
  61. package/dist/script/types.d.ts.map +1 -1
  62. package/dist/templating/generator-metadata.d.ts +1 -0
  63. package/dist/templating/generator-metadata.d.ts.map +1 -1
  64. package/dist/templating/generator-metadata.js +76 -0
  65. package/dist/templating/generator-metadata.js.map +1 -1
  66. package/dist/templating/postman-generators.d.ts +12 -0
  67. package/dist/templating/postman-generators.d.ts.map +1 -0
  68. package/dist/templating/postman-generators.js +577 -0
  69. package/dist/templating/postman-generators.js.map +1 -0
  70. package/dist/templating/template-engine.d.ts.map +1 -1
  71. package/dist/templating/template-engine.js +16 -0
  72. package/dist/templating/template-engine.js.map +1 -1
  73. package/dist/variables/resolver.d.ts.map +1 -1
  74. package/dist/variables/resolver.js +15 -0
  75. package/dist/variables/resolver.js.map +1 -1
  76. package/dist-cjs/scenario-runner/runScenario.js +8 -0
  77. package/dist-cjs/scenario-runner/runScenario.js.map +1 -1
  78. package/dist-cjs/scenario-runner/templateResolver.js +18 -0
  79. package/dist-cjs/scenario-runner/templateResolver.js.map +1 -1
  80. package/dist-cjs/script/executor.js +78 -9
  81. package/dist-cjs/script/executor.js.map +1 -1
  82. package/dist-cjs/script/features/collectionVariables.js +87 -0
  83. package/dist-cjs/script/features/collectionVariables.js.map +1 -0
  84. package/dist-cjs/script/features/cryptojs.js +18 -99
  85. package/dist-cjs/script/features/cryptojs.js.map +1 -1
  86. package/dist-cjs/script/features/environment.js +25 -1
  87. package/dist-cjs/script/features/environment.js.map +1 -1
  88. package/dist-cjs/script/features/execution.js +64 -0
  89. package/dist-cjs/script/features/execution.js.map +1 -0
  90. package/dist-cjs/script/features/headerList.js +289 -0
  91. package/dist-cjs/script/features/headerList.js.map +1 -0
  92. package/dist-cjs/script/features/info.js +36 -0
  93. package/dist-cjs/script/features/info.js.map +1 -0
  94. package/dist-cjs/script/features/request.js +38 -29
  95. package/dist-cjs/script/features/request.js.map +1 -1
  96. package/dist-cjs/script/features/response.js +16 -8
  97. package/dist-cjs/script/features/response.js.map +1 -1
  98. package/dist-cjs/script/features/responseAssertions.js +297 -0
  99. package/dist-cjs/script/features/responseAssertions.js.map +1 -0
  100. package/dist-cjs/script/features/timers.js +156 -0
  101. package/dist-cjs/script/features/timers.js.map +1 -0
  102. package/dist-cjs/script/features/variables.js +57 -11
  103. package/dist-cjs/script/features/variables.js.map +1 -1
  104. package/dist-cjs/script/scope.js +13 -4
  105. package/dist-cjs/script/scope.js.map +1 -1
  106. package/dist-cjs/templating/generator-metadata.js +77 -1
  107. package/dist-cjs/templating/generator-metadata.js.map +1 -1
  108. package/dist-cjs/templating/postman-generators.js +581 -0
  109. package/dist-cjs/templating/postman-generators.js.map +1 -0
  110. package/dist-cjs/templating/template-engine.js +16 -0
  111. package/dist-cjs/templating/template-engine.js.map +1 -1
  112. package/dist-cjs/variables/resolver.js +15 -0
  113. package/dist-cjs/variables/resolver.js.map +1 -1
  114. package/package.json +6 -2
@@ -0,0 +1,289 @@
1
+ "use strict";
2
+ // HeaderList — Postman-compatible header / query parameter wrapper.
3
+ //
4
+ // Background. Older callman-core releases exposed `pm.request.headers` and
5
+ // `pm.response.headers` as plain `Record<string, string>` objects. Many real
6
+ // Postman scripts assume a richer `HeaderList` shape:
7
+ //
8
+ // pm.request.headers.add({ key, value, description? })
9
+ // pm.request.headers.upsert({ key, value, description? })
10
+ // pm.request.headers.remove(name)
11
+ // pm.request.headers.has(name) // case-insensitive
12
+ // pm.request.headers.get(name) // case-insensitive
13
+ // pm.request.headers.idx(i) // entry at index
14
+ // pm.request.headers.all() // [{ key, value, description }]
15
+ // for (const h of pm.request.headers) ... // iterable
16
+ //
17
+ // The class below provides both shapes through a Proxy: existing scripts that
18
+ // rely on bracket access (`headers["X-Custom"]`, `Object.keys(headers)`,
19
+ // `Object.entries(headers)`) keep working bit-for-bit, while new scripts can
20
+ // call the Postman methods on the same object.
21
+ //
22
+ // Mutability:
23
+ // - Request headers are writable. `setHeader` / `add` / `upsert` mutate the
24
+ // internal list and the changes are observed by `toRequestState()` when
25
+ // the script completes.
26
+ // - Response headers are constructed read-only — `add` / `upsert` / `remove`
27
+ // throw to preserve the immutability of an already-received response.
28
+ //
29
+ // Case sensitivity rules:
30
+ // - Lookups via `.get()`, `.has()`, `.remove()`, `.upsert()` are
31
+ // case-INSENSITIVE. This matches Postman and is the HTTP semantic.
32
+ // - Bracket access (`headers["X-Custom"]`) is case-SENSITIVE for
33
+ // back-compat with older Callman scripts that depended on exact-case
34
+ // keys derived from the previous Record<string, string> shape.
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.headerListEntries = exports.createHeaderList = void 0;
37
+ const METHOD_KEYS = new Set([
38
+ "get",
39
+ "has",
40
+ "idx",
41
+ "add",
42
+ "upsert",
43
+ "remove",
44
+ "all",
45
+ "toJSON",
46
+ "isReadOnly",
47
+ ]);
48
+ const normaliseSpec = (spec) => {
49
+ if (spec === null || typeof spec !== "object") {
50
+ throw new TypeError("HeaderList: expected { key, value, description? } object");
51
+ }
52
+ const key = String(spec.key ?? "").trim();
53
+ if (!key) {
54
+ throw new TypeError("HeaderList: header key must be a non-empty string");
55
+ }
56
+ const value = spec.value;
57
+ const description = spec.description;
58
+ return {
59
+ key,
60
+ value: value === undefined || value === null ? "" : String(value),
61
+ description: typeof description === "string" ? description : undefined,
62
+ };
63
+ };
64
+ const stringifyValue = (value) => value === undefined || value === null ? "" : String(value);
65
+ class HeaderListImpl {
66
+ entries = [];
67
+ readOnly;
68
+ constructor(initial, readOnly = false) {
69
+ for (const entry of initial) {
70
+ this.entries.push({ ...entry });
71
+ }
72
+ this.readOnly = readOnly;
73
+ }
74
+ guardWritable() {
75
+ if (this.readOnly) {
76
+ throw new Error("Cannot mutate response headers — they are read-only after the response is captured.");
77
+ }
78
+ }
79
+ get(name) {
80
+ const target = String(name ?? "")
81
+ .trim()
82
+ .toLowerCase();
83
+ if (!target)
84
+ return undefined;
85
+ for (const entry of this.entries) {
86
+ if (entry.key.toLowerCase() === target) {
87
+ return entry.value;
88
+ }
89
+ }
90
+ return undefined;
91
+ }
92
+ has(name) {
93
+ return this.get(name) !== undefined;
94
+ }
95
+ idx(index) {
96
+ if (!Number.isInteger(index) || index < 0 || index >= this.entries.length) {
97
+ return undefined;
98
+ }
99
+ return { ...this.entries[index] };
100
+ }
101
+ add(spec) {
102
+ this.guardWritable();
103
+ this.entries.push(normaliseSpec(spec));
104
+ }
105
+ upsert(spec) {
106
+ this.guardWritable();
107
+ const next = normaliseSpec(spec);
108
+ const target = next.key.toLowerCase();
109
+ const replaceIndex = this.entries.findIndex((entry) => entry.key.toLowerCase() === target);
110
+ if (replaceIndex >= 0) {
111
+ this.entries[replaceIndex] = next;
112
+ // Drop any further duplicates so upsert leaves a single entry.
113
+ for (let i = this.entries.length - 1; i > replaceIndex; i -= 1) {
114
+ if (this.entries[i].key.toLowerCase() === target) {
115
+ this.entries.splice(i, 1);
116
+ }
117
+ }
118
+ return;
119
+ }
120
+ this.entries.push(next);
121
+ }
122
+ remove(name) {
123
+ this.guardWritable();
124
+ const target = String(name ?? "")
125
+ .trim()
126
+ .toLowerCase();
127
+ if (!target)
128
+ return;
129
+ for (let i = this.entries.length - 1; i >= 0; i -= 1) {
130
+ if (this.entries[i].key.toLowerCase() === target) {
131
+ this.entries.splice(i, 1);
132
+ }
133
+ }
134
+ }
135
+ all() {
136
+ return this.entries.map((entry) => ({ ...entry }));
137
+ }
138
+ toJSON() {
139
+ return this.all();
140
+ }
141
+ *[Symbol.iterator]() {
142
+ for (const entry of this.entries) {
143
+ yield { ...entry };
144
+ }
145
+ }
146
+ // ── Internal hooks used by the Proxy wrapper ──────────────────────────
147
+ __rawEntries() {
148
+ return this.entries;
149
+ }
150
+ __setRaw(key, value) {
151
+ this.guardWritable();
152
+ const normalisedKey = String(key ?? "").trim();
153
+ if (!normalisedKey)
154
+ return;
155
+ // Bracket-assignment is treated as upsert with EXACT case so that
156
+ // Object.keys(headers) and headers[k] readbacks see the user's chosen
157
+ // case — matches the legacy Record<string, string> behaviour.
158
+ const stringValue = stringifyValue(value);
159
+ const existing = this.entries.findIndex((entry) => entry.key === normalisedKey);
160
+ if (existing >= 0) {
161
+ this.entries[existing].value = stringValue;
162
+ return;
163
+ }
164
+ this.entries.push({ key: normalisedKey, value: stringValue });
165
+ }
166
+ __deleteRaw(key) {
167
+ this.guardWritable();
168
+ const normalisedKey = String(key ?? "").trim();
169
+ if (!normalisedKey)
170
+ return false;
171
+ const idx = this.entries.findIndex((entry) => entry.key === normalisedKey);
172
+ if (idx >= 0) {
173
+ this.entries.splice(idx, 1);
174
+ return true;
175
+ }
176
+ return false;
177
+ }
178
+ }
179
+ /**
180
+ * Build a Proxy-wrapped HeaderList. Bracket access reads / writes as if the
181
+ * value were a plain `Record<string, string>` (case-sensitive, exact key
182
+ * match). The HeaderList methods (`get`, `has`, `add`, ...) are exposed
183
+ * directly on the wrapper.
184
+ */
185
+ const createHeaderList = (initial = [], options = {}) => {
186
+ const entries = Array.isArray(initial)
187
+ ? initial.map((entry) => ({ ...entry }))
188
+ : Object.entries(initial).map(([key, value]) => ({
189
+ key,
190
+ value: stringifyValue(value),
191
+ }));
192
+ const impl = new HeaderListImpl(entries, options.readOnly ?? false);
193
+ return new Proxy(impl, {
194
+ get(target, prop, receiver) {
195
+ // Hand back methods / iterator unchanged.
196
+ if (typeof prop === "symbol") {
197
+ return Reflect.get(target, prop, receiver);
198
+ }
199
+ if (METHOD_KEYS.has(prop) || prop in target) {
200
+ const value = Reflect.get(target, prop, receiver);
201
+ if (typeof value === "function") {
202
+ return value.bind(target);
203
+ }
204
+ return value;
205
+ }
206
+ // String prop → look up as a header name (case-sensitive bracket
207
+ // access for back-compat with the previous Record shape).
208
+ const raw = target.__rawEntries();
209
+ for (const entry of raw) {
210
+ if (entry.key === prop) {
211
+ return entry.value;
212
+ }
213
+ }
214
+ return undefined;
215
+ },
216
+ set(target, prop, value, receiver) {
217
+ if (typeof prop === "symbol" || METHOD_KEYS.has(prop)) {
218
+ return Reflect.set(target, prop, value, receiver);
219
+ }
220
+ target.__setRaw(prop, value);
221
+ return true;
222
+ },
223
+ has(target, prop) {
224
+ if (typeof prop === "symbol" || METHOD_KEYS.has(prop) || prop in target) {
225
+ return Reflect.has(target, prop);
226
+ }
227
+ const raw = target.__rawEntries();
228
+ return raw.some((entry) => entry.key === prop);
229
+ },
230
+ deleteProperty(target, prop) {
231
+ if (typeof prop === "symbol" || METHOD_KEYS.has(prop)) {
232
+ return Reflect.deleteProperty(target, prop);
233
+ }
234
+ return target.__deleteRaw(String(prop));
235
+ },
236
+ ownKeys(target) {
237
+ // Object.keys / Object.entries / for-in see only the header names.
238
+ // The HeaderList methods stay non-enumerable so they don't pollute
239
+ // serialisation.
240
+ const raw = target.__rawEntries();
241
+ const seen = new Set();
242
+ const keys = [];
243
+ for (const entry of raw) {
244
+ if (!seen.has(entry.key)) {
245
+ seen.add(entry.key);
246
+ keys.push(entry.key);
247
+ }
248
+ }
249
+ return keys;
250
+ },
251
+ getOwnPropertyDescriptor(target, prop) {
252
+ if (typeof prop === "symbol") {
253
+ return Reflect.getOwnPropertyDescriptor(target, prop);
254
+ }
255
+ if (METHOD_KEYS.has(prop)) {
256
+ return undefined;
257
+ }
258
+ const raw = target.__rawEntries();
259
+ const found = raw.find((entry) => entry.key === prop);
260
+ if (found) {
261
+ return {
262
+ configurable: true,
263
+ enumerable: true,
264
+ writable: true,
265
+ value: found.value,
266
+ };
267
+ }
268
+ return undefined;
269
+ },
270
+ });
271
+ };
272
+ exports.createHeaderList = createHeaderList;
273
+ /**
274
+ * Best-effort extraction of the underlying entry list, used by the
275
+ * request-state serialiser. Falls back to `Object.entries` for back-compat
276
+ * with any external callers that still pass a plain record.
277
+ */
278
+ const headerListEntries = (value) => {
279
+ if (value &&
280
+ typeof value.all === "function") {
281
+ return value.all();
282
+ }
283
+ return Object.entries(value).map(([key, raw]) => ({
284
+ key,
285
+ value: stringifyValue(raw),
286
+ }));
287
+ };
288
+ exports.headerListEntries = headerListEntries;
289
+ //# sourceMappingURL=headerList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"headerList.js","sourceRoot":"","sources":["../../../src/script/features/headerList.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ // pm.info — Postman's read-only snapshot of "where am I" in a run.
3
+ //
4
+ // Every field is host-supplied via capabilities.info. Defaults are
5
+ // chosen so a single Send (no iteration) still produces sensible
6
+ // values: iteration=1, iterationCount=1, eventName based on stage.
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.buildInfoApi = void 0;
9
+ const stageToEventName = (stage) => {
10
+ switch (stage) {
11
+ case "pre-request":
12
+ return "prerequest";
13
+ case "tests":
14
+ return "test";
15
+ case "post-response":
16
+ return "post-response";
17
+ case "script":
18
+ return "scenario-script";
19
+ default:
20
+ return String(stage);
21
+ }
22
+ };
23
+ const buildInfoApi = (capability, stage) => {
24
+ const fallbackEvent = stageToEventName(stage);
25
+ return {
26
+ eventName: capability?.eventName ?? fallbackEvent,
27
+ iteration: typeof capability?.iteration === "number" ? capability.iteration : 1,
28
+ iterationCount: typeof capability?.iterationCount === "number"
29
+ ? capability.iterationCount
30
+ : 1,
31
+ requestName: typeof capability?.requestName === "string" ? capability.requestName : "",
32
+ requestId: typeof capability?.requestId === "string" ? capability.requestId : "",
33
+ };
34
+ };
35
+ exports.buildInfoApi = buildInfoApi;
36
+ //# sourceMappingURL=info.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"info.js","sourceRoot":"","sources":["../../../src/script/features/info.ts"],"names":[],"mappings":";AAAA,mEAAmE;AACnE,EAAE;AACF,mEAAmE;AACnE,iEAAiE;AACjE,mEAAmE;;;AAYnE,MAAM,gBAAgB,GAAG,CAAC,KAAkB,EAAU,EAAE;IACtD,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,aAAa;YAChB,OAAO,YAAY,CAAC;QACtB,KAAK,OAAO;YACV,OAAO,MAAM,CAAC;QAChB,KAAK,eAAe;YAClB,OAAO,eAAe,CAAC;QACzB,KAAK,QAAQ;YACX,OAAO,iBAAiB,CAAC;QAC3B;YACE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;AACH,CAAC,CAAC;AAEK,MAAM,YAAY,GAAG,CAC1B,UAA4C,EAC5C,KAAkB,EACT,EAAE;IACX,MAAM,aAAa,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAC9C,OAAO;QACL,SAAS,EAAE,UAAU,EAAE,SAAS,IAAI,aAAa;QACjD,SAAS,EACP,OAAO,UAAU,EAAE,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QACtE,cAAc,EACZ,OAAO,UAAU,EAAE,cAAc,KAAK,QAAQ;YAC5C,CAAC,CAAC,UAAU,CAAC,cAAc;YAC3B,CAAC,CAAC,CAAC;QACP,WAAW,EACT,OAAO,UAAU,EAAE,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE;QAC3E,SAAS,EACP,OAAO,UAAU,EAAE,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE;KACxE,CAAC;AACJ,CAAC,CAAC;AAlBW,QAAA,YAAY,gBAkBvB"}
@@ -5,41 +5,36 @@
5
5
  // getQueryParam/setQueryParam/unsetQueryParam, setMethod/setUrl/setRawBody.
6
6
  // Mutations are applied to a working copy; callers retrieve the final
7
7
  // state via `toRequestState()` after the script completes.
8
+ //
9
+ // `headers` and `query` are exposed as HeaderList wrappers (see
10
+ // `./headerList.ts`). Existing scripts that use bracket access
11
+ // (`pm.request.headers["X-Custom"]`) continue to work bit-for-bit; new
12
+ // scripts can call `headers.get`, `headers.upsert`, `headers.add`,
13
+ // `headers.has`, `headers.remove`, etc.
8
14
  Object.defineProperty(exports, "__esModule", { value: true });
9
15
  exports.buildRequestApi = void 0;
16
+ const headerList_js_1 = require("./headerList.js");
10
17
  const cloneBody = (body) => ({
11
18
  mode: body.mode,
12
19
  raw: body.raw,
13
20
  formEntries: body.formEntries.map((entry) => ({ ...entry })),
14
21
  });
15
- const toRecord = (entries) => {
16
- const record = {};
17
- for (const entry of entries) {
18
- if (entry.enabled === false) {
19
- continue;
20
- }
21
- const key = entry.key.trim();
22
- if (!key) {
23
- continue;
24
- }
25
- record[key] = entry.value;
26
- }
27
- return record;
28
- };
29
- const toEntries = (record) => Object.entries(record).map(([key, value]) => ({
30
- key,
31
- value,
32
- enabled: true,
33
- }));
34
22
  const stringifyHeaderValue = (value) => {
35
23
  if (value === undefined || value === null) {
36
24
  return "";
37
25
  }
38
26
  return String(value);
39
27
  };
28
+ const enabledEntries = (entries) => entries
29
+ .filter((entry) => entry.enabled !== false)
30
+ .map((entry) => ({
31
+ key: entry.key.trim(),
32
+ value: entry.value,
33
+ }))
34
+ .filter((entry) => entry.key.length > 0);
40
35
  const buildRequestApi = (request) => {
41
- const headers = toRecord(request.headers);
42
- const query = toRecord(request.query);
36
+ const headers = (0, headerList_js_1.createHeaderList)(enabledEntries(request.headers));
37
+ const query = (0, headerList_js_1.createHeaderList)(enabledEntries(request.query));
43
38
  const body = cloneBody(request.body);
44
39
  const api = {
45
40
  method: request.method,
@@ -47,35 +42,43 @@ const buildRequestApi = (request) => {
47
42
  headers,
48
43
  query,
49
44
  body,
50
- getHeader: (key) => headers[String(key ?? "").trim()],
45
+ getHeader: (key) => headers.get(String(key ?? "").trim()),
51
46
  setHeader: (key, value) => {
52
47
  const normalizedKey = String(key ?? "").trim();
53
48
  if (!normalizedKey) {
54
49
  return;
55
50
  }
56
- headers[normalizedKey] = stringifyHeaderValue(value);
51
+ // upsert keeps duplicates collapsed and is case-insensitive — matches
52
+ // both Postman semantics and the legacy `headers[k] = v` behaviour.
53
+ headers.upsert({
54
+ key: normalizedKey,
55
+ value: stringifyHeaderValue(value),
56
+ });
57
57
  },
58
58
  unsetHeader: (key) => {
59
59
  const normalizedKey = String(key ?? "").trim();
60
60
  if (!normalizedKey) {
61
61
  return;
62
62
  }
63
- delete headers[normalizedKey];
63
+ headers.remove(normalizedKey);
64
64
  },
65
- getQueryParam: (key) => query[String(key ?? "").trim()],
65
+ getQueryParam: (key) => query.get(String(key ?? "").trim()),
66
66
  setQueryParam: (key, value) => {
67
67
  const normalizedKey = String(key ?? "").trim();
68
68
  if (!normalizedKey) {
69
69
  return;
70
70
  }
71
- query[normalizedKey] = stringifyHeaderValue(value);
71
+ query.upsert({
72
+ key: normalizedKey,
73
+ value: stringifyHeaderValue(value),
74
+ });
72
75
  },
73
76
  unsetQueryParam: (key) => {
74
77
  const normalizedKey = String(key ?? "").trim();
75
78
  if (!normalizedKey) {
76
79
  return;
77
80
  }
78
- delete query[normalizedKey];
81
+ query.remove(normalizedKey);
79
82
  },
80
83
  setMethod(nextMethod) {
81
84
  const normalizedValue = String(nextMethod ?? "")
@@ -99,8 +102,14 @@ const buildRequestApi = (request) => {
99
102
  toRequestState: () => ({
100
103
  method: api.method,
101
104
  url: api.url,
102
- headers: toEntries(api.headers),
103
- query: toEntries(api.query),
105
+ headers: (0, headerList_js_1.headerListEntries)(api.headers).map((entry) => ({
106
+ ...entry,
107
+ enabled: true,
108
+ })),
109
+ query: (0, headerList_js_1.headerListEntries)(api.query).map((entry) => ({
110
+ ...entry,
111
+ enabled: true,
112
+ })),
104
113
  body: cloneBody(api.body),
105
114
  }),
106
115
  };
@@ -1 +1 @@
1
- {"version":3,"file":"request.js","sourceRoot":"","sources":["../../../src/script/features/request.ts"],"names":[],"mappings":";AAAA,6EAA6E;AAC7E,EAAE;AACF,0EAA0E;AAC1E,4EAA4E;AAC5E,sEAAsE;AACtE,2DAA2D;;;AAyB3D,MAAM,SAAS,GAAG,CAAC,IAA4B,EAA0B,EAAE,CAAC,CAAC;IAC3E,IAAI,EAAE,IAAI,CAAC,IAAI;IACf,GAAG,EAAE,IAAI,CAAC,GAAG;IACb,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;CAC7D,CAAC,CAAC;AAEH,MAAM,QAAQ,GAAG,CAAC,OAA6B,EAA0B,EAAE;IACzE,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,KAAK,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;YAC5B,SAAS;QACX,CAAC;QACD,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QAC7B,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,SAAS;QACX,CAAC;QACD,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC;IAC5B,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,MAA8B,EAAwB,EAAE,CACzE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;IAC5C,GAAG;IACH,KAAK;IACL,OAAO,EAAE,IAAI;CACd,CAAC,CAAC,CAAC;AAEN,MAAM,oBAAoB,GAAG,CAAC,KAAc,EAAU,EAAE;IACtD,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;AAOK,MAAM,eAAe,GAAG,CAAC,OAA2B,EAAoB,EAAE;IAC/E,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1C,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACtC,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAErC,MAAM,GAAG,GAAe;QACtB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,OAAO;QACP,KAAK;QACL,IAAI;QACJ,SAAS,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC7D,SAAS,EAAE,CAAC,GAAW,EAAE,KAAc,EAAE,EAAE;YACzC,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YAC/C,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,OAAO;YACT,CAAC;YACD,OAAO,CAAC,aAAa,CAAC,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;QACvD,CAAC;QACD,WAAW,EAAE,CAAC,GAAW,EAAE,EAAE;YAC3B,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YAC/C,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,OAAO;YACT,CAAC;YACD,OAAO,OAAO,CAAC,aAAa,CAAC,CAAC;QAChC,CAAC;QACD,aAAa,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC/D,aAAa,EAAE,CAAC,GAAW,EAAE,KAAc,EAAE,EAAE;YAC7C,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YAC/C,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,OAAO;YACT,CAAC;YACD,KAAK,CAAC,aAAa,CAAC,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;QACrD,CAAC;QACD,eAAe,EAAE,CAAC,GAAW,EAAE,EAAE;YAC/B,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YAC/C,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,OAAO;YACT,CAAC;YACD,OAAO,KAAK,CAAC,aAAa,CAAC,CAAC;QAC9B,CAAC;QACD,SAAS,CAAC,UAAmB;YAC3B,MAAM,eAAe,GAAG,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC;iBAC7C,IAAI,EAAE;iBACN,WAAW,EAAE,CAAC;YACjB,IAAI,eAAe,EAAE,CAAC;gBACpB,IAAI,CAAC,MAAM,GAAG,eAAe,CAAC;YAChC,CAAC;QACH,CAAC;QACD,MAAM,CAAC,OAAgB;YACrB,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;QACnC,CAAC;QACD,UAAU,CAAC,KAAc;YACvB,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;YACvB,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC3E,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QAC7B,CAAC;KACF,CAAC;IAEF,OAAO;QACL,GAAG;QACH,cAAc,EAAE,GAAG,EAAE,CAAC,CAAC;YACrB,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,GAAG,EAAE,GAAG,CAAC,GAAG;YACZ,OAAO,EAAE,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC;YAC/B,KAAK,EAAE,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;YAC3B,IAAI,EAAE,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;SAC1B,CAAC;KACH,CAAC;AACJ,CAAC,CAAC;AArEW,QAAA,eAAe,mBAqE1B"}
1
+ {"version":3,"file":"request.js","sourceRoot":"","sources":["../../../src/script/features/request.ts"],"names":[],"mappings":"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"}
@@ -2,13 +2,19 @@
2
2
  // pm.response — read-only view of the captured response, plus the classic
3
3
  // Postman fluent assertion entry points (.to / .be / .have).
4
4
  //
5
- // We return a plain object with the assertion getters spliced on so user
6
- // scripts can write `pm.response.to.have.status(200)` exactly like Postman.
7
- // The PmAssertion is a fresh instance bound to the response itself so the
8
- // chain can drill into headers / status / body via .property() etc.
5
+ // `headers` is exposed as a read-only HeaderList wrapper (see
6
+ // `./headerList.ts`). Bracket access (`pm.response.headers["x-trace"]`) keeps
7
+ // working bit-for-bit with the previous Record<string, string> shape; new
8
+ // scripts can call `pm.response.headers.get("X-Trace")` (case-insensitive),
9
+ // `.has(name)`, `.idx(i)`, `.all()`, or iterate with `for...of`.
10
+ //
11
+ // `.to` / `.be` / `.have` are spliced with a `ResponseAssertion` instance so
12
+ // chains like `pm.response.to.be.success.and.have.jsonBody("data.id")` work
13
+ // without any helper wrappers.
9
14
  Object.defineProperty(exports, "__esModule", { value: true });
10
15
  exports.buildResponseApi = void 0;
11
- const assertions_js_1 = require("./assertions.js");
16
+ const headerList_js_1 = require("./headerList.js");
17
+ const responseAssertions_js_1 = require("./responseAssertions.js");
12
18
  const buildResponseApi = (response) => {
13
19
  if (!response) {
14
20
  return null;
@@ -22,7 +28,7 @@ const buildResponseApi = (response) => {
22
28
  status: response.status,
23
29
  code: response.status,
24
30
  statusText: response.statusText,
25
- headers: response.headers,
31
+ headers: (0, headerList_js_1.createHeaderList)(response.headers, { readOnly: true }),
26
32
  data: parsedBody,
27
33
  body: parsedBody,
28
34
  rawBody: response.rawBody,
@@ -31,13 +37,15 @@ const buildResponseApi = (response) => {
31
37
  durationMs: response.durationMs,
32
38
  responseTime: response.durationMs,
33
39
  sizeBytes: response.sizeBytes,
40
+ responseSize: response.sizeBytes,
34
41
  cookies: [...response.cookies],
35
42
  json: () => response.jsonBody,
36
43
  text: () => response.rawBody,
37
44
  };
38
45
  // Splice fluent assertion getters onto the same object so chains like
39
- // `pm.response.to.have.status(200)` work without a helper wrapper.
40
- const assertion = new assertions_js_1.PmAssertion(api);
46
+ // `pm.response.to.have.status(200)`, `pm.response.to.be.success`, and
47
+ // `pm.response.to.have.jsonBody("data.id", "abc")` all work.
48
+ const assertion = new responseAssertions_js_1.ResponseAssertion(api);
41
49
  api.to = assertion;
42
50
  api.be = assertion;
43
51
  api.have = assertion;
@@ -1 +1 @@
1
- {"version":3,"file":"response.js","sourceRoot":"","sources":["../../../src/script/features/response.ts"],"names":[],"mappings":";AAAA,0EAA0E;AAC1E,6DAA6D;AAC7D,EAAE;AACF,yEAAyE;AACzE,4EAA4E;AAC5E,0EAA0E;AAC1E,oEAAoE;;;AAEpE,mDAA8C;AA4BvC,MAAM,gBAAgB,GAAG,CAAC,QAAoC,EAAsB,EAAE;IAC3F,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IAED,iEAAiE;IACjE,4EAA4E;IAC5E,oEAAoE;IACpE,MAAM,UAAU,GAAG,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAI,CAAC;IAEtD,MAAM,GAAG,GAAgB;QACvB,EAAE,EAAE,QAAQ,CAAC,EAAE;QACf,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,IAAI,EAAE,QAAQ,CAAC,MAAM;QACrB,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,GAAG,EAAE,QAAQ,CAAC,OAAO;QACrB,WAAW,EAAE,QAAQ,CAAC,WAAW;QACjC,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,YAAY,EAAE,QAAQ,CAAC,UAAU;QACjC,SAAS,EAAE,QAAQ,CAAC,SAAS;QAC7B,OAAO,EAAE,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC;QAC9B,IAAI,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ;QAC7B,IAAI,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO;KAC7B,CAAC;IAEF,sEAAsE;IACtE,mEAAmE;IACnE,MAAM,SAAS,GAAG,IAAI,2BAAW,CAAC,GAAG,CAAC,CAAC;IACvC,GAAG,CAAC,EAAE,GAAG,SAAS,CAAC;IACnB,GAAG,CAAC,EAAE,GAAG,SAAS,CAAC;IACnB,GAAG,CAAC,IAAI,GAAG,SAAS,CAAC;IAErB,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AArCW,QAAA,gBAAgB,oBAqC3B"}
1
+ {"version":3,"file":"response.js","sourceRoot":"","sources":["../../../src/script/features/response.ts"],"names":[],"mappings":";AAAA,0EAA0E;AAC1E,6DAA6D;AAC7D,EAAE;AACF,8DAA8D;AAC9D,8EAA8E;AAC9E,0EAA0E;AAC1E,4EAA4E;AAC5E,iEAAiE;AACjE,EAAE;AACF,6EAA6E;AAC7E,4EAA4E;AAC5E,+BAA+B;;;AAE/B,mDAAoE;AACpE,mEAA4D;AA6BrD,MAAM,gBAAgB,GAAG,CAAC,QAAoC,EAAsB,EAAE;IAC3F,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IAED,iEAAiE;IACjE,4EAA4E;IAC5E,oEAAoE;IACpE,MAAM,UAAU,GAAG,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAI,CAAC;IAEtD,MAAM,GAAG,GAAgB;QACvB,EAAE,EAAE,QAAQ,CAAC,EAAE;QACf,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,IAAI,EAAE,QAAQ,CAAC,MAAM;QACrB,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,OAAO,EAAE,IAAA,gCAAgB,EAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAC/D,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,GAAG,EAAE,QAAQ,CAAC,OAAO;QACrB,WAAW,EAAE,QAAQ,CAAC,WAAW;QACjC,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,YAAY,EAAE,QAAQ,CAAC,UAAU;QACjC,SAAS,EAAE,QAAQ,CAAC,SAAS;QAC7B,YAAY,EAAE,QAAQ,CAAC,SAAS;QAChC,OAAO,EAAE,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC;QAC9B,IAAI,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ;QAC7B,IAAI,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO;KAC7B,CAAC;IAEF,sEAAsE;IACtE,sEAAsE;IACtE,6DAA6D;IAC7D,MAAM,SAAS,GAAG,IAAI,yCAAiB,CAAC,GAAG,CAAC,CAAC;IAC7C,GAAG,CAAC,EAAE,GAAG,SAAS,CAAC;IACnB,GAAG,CAAC,EAAE,GAAG,SAAS,CAAC;IACnB,GAAG,CAAC,IAAI,GAAG,SAAS,CAAC;IAErB,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAvCW,QAAA,gBAAgB,oBAuC3B"}