callman-core 1.35.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.
Files changed (247) hide show
  1. package/ai-packs/feature-policy.md +1 -6
  2. package/ai-packs/pm-api.md +238 -98
  3. package/ai-packs/sandbox-globals.md +6 -5
  4. package/dist/ai/prompts/fragments.d.ts.map +1 -1
  5. package/dist/ai/prompts/fragments.js +0 -1
  6. package/dist/ai/prompts/fragments.js.map +1 -1
  7. package/dist/ai/prompts/unified.js +1 -1
  8. package/dist/ai/prompts/unified.js.map +1 -1
  9. package/dist/ai/types.d.ts +1 -1
  10. package/dist/ai/types.d.ts.map +1 -1
  11. package/dist/ai/types.js +1 -1
  12. package/dist/ai/types.js.map +1 -1
  13. package/dist/index.d.ts +5 -2
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +3 -1
  16. package/dist/index.js.map +1 -1
  17. package/dist/runner/requestRunner.d.ts.map +1 -1
  18. package/dist/runner/requestRunner.js +33 -0
  19. package/dist/runner/requestRunner.js.map +1 -1
  20. package/dist/runner/runCollection.d.ts.map +1 -1
  21. package/dist/runner/runCollection.js +46 -9
  22. package/dist/runner/runCollection.js.map +1 -1
  23. package/dist/runner/runRequestWithDataset.d.ts.map +1 -1
  24. package/dist/runner/runRequestWithDataset.js +3 -2
  25. package/dist/runner/runRequestWithDataset.js.map +1 -1
  26. package/dist/scenario-runner/adapters/request-executor.d.ts.map +1 -1
  27. package/dist/scenario-runner/adapters/request-executor.js +7 -0
  28. package/dist/scenario-runner/adapters/request-executor.js.map +1 -1
  29. package/dist/scenario-runner/runScenario.d.ts.map +1 -1
  30. package/dist/scenario-runner/runScenario.js +4 -0
  31. package/dist/scenario-runner/runScenario.js.map +1 -1
  32. package/dist/scenario-runner/types.d.ts +11 -0
  33. package/dist/scenario-runner/types.d.ts.map +1 -1
  34. package/dist/script/chain.d.ts +2 -0
  35. package/dist/script/chain.d.ts.map +1 -1
  36. package/dist/script/chain.js +2 -0
  37. package/dist/script/chain.js.map +1 -1
  38. package/dist/script/errors.js +6 -6
  39. package/dist/script/errors.js.map +1 -1
  40. package/dist/script/executor.d.ts.map +1 -1
  41. package/dist/script/executor.js +284 -64
  42. package/dist/script/executor.js.map +1 -1
  43. package/dist/script/features/collectionVariables.d.ts +4 -4
  44. package/dist/script/features/collectionVariables.d.ts.map +1 -1
  45. package/dist/script/features/collectionVariables.js +20 -11
  46. package/dist/script/features/collectionVariables.js.map +1 -1
  47. package/dist/script/features/environment.d.ts +4 -4
  48. package/dist/script/features/environment.d.ts.map +1 -1
  49. package/dist/script/features/environment.js +20 -11
  50. package/dist/script/features/environment.js.map +1 -1
  51. package/dist/script/features/feature-policy.d.ts +1 -1
  52. package/dist/script/features/feature-policy.d.ts.map +1 -1
  53. package/dist/script/features/feature-policy.js +2 -2
  54. package/dist/script/features/feature-policy.js.map +1 -1
  55. package/dist/script/features/info.d.ts.map +1 -1
  56. package/dist/script/features/info.js +6 -3
  57. package/dist/script/features/info.js.map +1 -1
  58. package/dist/script/features/iterationData.d.ts +12 -0
  59. package/dist/script/features/iterationData.d.ts.map +1 -0
  60. package/dist/script/features/iterationData.js +28 -0
  61. package/dist/script/features/iterationData.js.map +1 -0
  62. package/dist/script/features/legacyPostman.d.ts +14 -0
  63. package/dist/script/features/legacyPostman.d.ts.map +1 -0
  64. package/dist/script/features/legacyPostman.js +106 -0
  65. package/dist/script/features/legacyPostman.js.map +1 -0
  66. package/dist/script/features/log.d.ts +35 -8
  67. package/dist/script/features/log.d.ts.map +1 -1
  68. package/dist/script/features/log.js +343 -27
  69. package/dist/script/features/log.js.map +1 -1
  70. package/dist/script/features/tests.d.ts +7 -8
  71. package/dist/script/features/tests.d.ts.map +1 -1
  72. package/dist/script/features/tests.js +90 -64
  73. package/dist/script/features/tests.js.map +1 -1
  74. package/dist/script/features/timers.d.ts +7 -1
  75. package/dist/script/features/timers.d.ts.map +1 -1
  76. package/dist/script/features/timers.js +17 -5
  77. package/dist/script/features/timers.js.map +1 -1
  78. package/dist/script/features/variables.d.ts +19 -4
  79. package/dist/script/features/variables.d.ts.map +1 -1
  80. package/dist/script/features/variables.js +22 -6
  81. package/dist/script/features/variables.js.map +1 -1
  82. package/dist/script/features/visualizer.d.ts +15 -0
  83. package/dist/script/features/visualizer.d.ts.map +1 -0
  84. package/dist/script/features/visualizer.js +52 -0
  85. package/dist/script/features/visualizer.js.map +1 -0
  86. package/dist/script/isolated-runner.d.ts +4 -1
  87. package/dist/script/isolated-runner.d.ts.map +1 -1
  88. package/dist/script/isolated-runner.js +26 -2
  89. package/dist/script/isolated-runner.js.map +1 -1
  90. package/dist/script/legacy.d.ts +1 -0
  91. package/dist/script/legacy.d.ts.map +1 -1
  92. package/dist/script/legacy.js +12 -2
  93. package/dist/script/legacy.js.map +1 -1
  94. package/dist/script/pm-api-declarations.d.ts +45 -0
  95. package/dist/script/pm-api-declarations.d.ts.map +1 -0
  96. package/dist/script/pm-api-declarations.js +1963 -0
  97. package/dist/script/pm-api-declarations.js.map +1 -0
  98. package/dist/script/pm-api-metadata.d.ts +3 -1
  99. package/dist/script/pm-api-metadata.d.ts.map +1 -1
  100. package/dist/script/pm-api-metadata.js +336 -106
  101. package/dist/script/pm-api-metadata.js.map +1 -1
  102. package/dist/script/pm-api-reference.d.ts.map +1 -1
  103. package/dist/script/pm-api-reference.js +24 -8
  104. package/dist/script/pm-api-reference.js.map +1 -1
  105. package/dist/script/postman/chaiCompat.d.ts +4 -0
  106. package/dist/script/postman/chaiCompat.d.ts.map +1 -0
  107. package/dist/script/postman/chaiCompat.js +176 -0
  108. package/dist/script/postman/chaiCompat.js.map +1 -0
  109. package/dist/script/postman/cookies.d.ts +36 -0
  110. package/dist/script/postman/cookies.d.ts.map +1 -0
  111. package/dist/script/postman/cookies.js +163 -0
  112. package/dist/script/postman/cookies.js.map +1 -0
  113. package/dist/script/postman/modules.d.ts +16 -0
  114. package/dist/script/postman/modules.d.ts.map +1 -0
  115. package/dist/script/postman/modules.js +114 -0
  116. package/dist/script/postman/modules.js.map +1 -0
  117. package/dist/script/postman/proxies.d.ts +13 -0
  118. package/dist/script/postman/proxies.d.ts.map +1 -0
  119. package/dist/script/postman/proxies.js +88 -0
  120. package/dist/script/postman/proxies.js.map +1 -0
  121. package/dist/script/postman/requestAdapter.d.ts +7 -0
  122. package/dist/script/postman/requestAdapter.d.ts.map +1 -0
  123. package/dist/script/postman/requestAdapter.js +223 -0
  124. package/dist/script/postman/requestAdapter.js.map +1 -0
  125. package/dist/script/postman/responseAdapter.d.ts +5 -0
  126. package/dist/script/postman/responseAdapter.d.ts.map +1 -0
  127. package/dist/script/postman/responseAdapter.js +78 -0
  128. package/dist/script/postman/responseAdapter.js.map +1 -0
  129. package/dist/script/postman/runtime.d.ts +22 -0
  130. package/dist/script/postman/runtime.d.ts.map +1 -0
  131. package/dist/script/postman/runtime.js +122 -0
  132. package/dist/script/postman/runtime.js.map +1 -0
  133. package/dist/script/scope.d.ts +5 -1
  134. package/dist/script/scope.d.ts.map +1 -1
  135. package/dist/script/scope.js +47 -5
  136. package/dist/script/scope.js.map +1 -1
  137. package/dist/script/types.d.ts +33 -14
  138. package/dist/script/types.d.ts.map +1 -1
  139. package/dist/script/worker-entry.js +9 -0
  140. package/dist/script/worker-entry.js.map +1 -1
  141. package/dist/script/worker-pool.d.ts +3 -1
  142. package/dist/script/worker-pool.d.ts.map +1 -1
  143. package/dist/script/worker-pool.js +23 -2
  144. package/dist/script/worker-pool.js.map +1 -1
  145. package/dist/templating/generator-metadata.d.ts +1 -0
  146. package/dist/templating/generator-metadata.d.ts.map +1 -1
  147. package/dist/templating/generator-metadata.js +14 -0
  148. package/dist/templating/generator-metadata.js.map +1 -1
  149. package/dist/templating/postman-dynamic-catalog.d.ts +7 -0
  150. package/dist/templating/postman-dynamic-catalog.d.ts.map +1 -0
  151. package/dist/templating/postman-dynamic-catalog.js +126 -0
  152. package/dist/templating/postman-dynamic-catalog.js.map +1 -0
  153. package/dist/templating/postman-generators.d.ts +9 -0
  154. package/dist/templating/postman-generators.d.ts.map +1 -1
  155. package/dist/templating/postman-generators.js +10 -1
  156. package/dist/templating/postman-generators.js.map +1 -1
  157. package/dist/types/index.d.ts +22 -1
  158. package/dist/types/index.d.ts.map +1 -1
  159. package/dist/variables/replaceIn.d.ts +10 -0
  160. package/dist/variables/replaceIn.d.ts.map +1 -0
  161. package/dist/variables/replaceIn.js +106 -0
  162. package/dist/variables/replaceIn.js.map +1 -0
  163. package/dist-cjs/ai/prompts/fragments.js +0 -1
  164. package/dist-cjs/ai/prompts/fragments.js.map +1 -1
  165. package/dist-cjs/ai/prompts/unified.js +1 -1
  166. package/dist-cjs/ai/prompts/unified.js.map +1 -1
  167. package/dist-cjs/ai/types.js +1 -1
  168. package/dist-cjs/ai/types.js.map +1 -1
  169. package/dist-cjs/index.js +17 -5
  170. package/dist-cjs/index.js.map +1 -1
  171. package/dist-cjs/runner/requestRunner.js +33 -0
  172. package/dist-cjs/runner/requestRunner.js.map +1 -1
  173. package/dist-cjs/runner/runCollection.js +46 -9
  174. package/dist-cjs/runner/runCollection.js.map +1 -1
  175. package/dist-cjs/runner/runRequestWithDataset.js +3 -2
  176. package/dist-cjs/runner/runRequestWithDataset.js.map +1 -1
  177. package/dist-cjs/scenario-runner/adapters/request-executor.js +7 -0
  178. package/dist-cjs/scenario-runner/adapters/request-executor.js.map +1 -1
  179. package/dist-cjs/scenario-runner/runScenario.js +4 -0
  180. package/dist-cjs/scenario-runner/runScenario.js.map +1 -1
  181. package/dist-cjs/script/chain.js +2 -0
  182. package/dist-cjs/script/chain.js.map +1 -1
  183. package/dist-cjs/script/errors.js +6 -6
  184. package/dist-cjs/script/errors.js.map +1 -1
  185. package/dist-cjs/script/executor.js +284 -64
  186. package/dist-cjs/script/executor.js.map +1 -1
  187. package/dist-cjs/script/features/collectionVariables.js +20 -11
  188. package/dist-cjs/script/features/collectionVariables.js.map +1 -1
  189. package/dist-cjs/script/features/environment.js +20 -11
  190. package/dist-cjs/script/features/environment.js.map +1 -1
  191. package/dist-cjs/script/features/feature-policy.js +2 -2
  192. package/dist-cjs/script/features/feature-policy.js.map +1 -1
  193. package/dist-cjs/script/features/info.js +6 -3
  194. package/dist-cjs/script/features/info.js.map +1 -1
  195. package/dist-cjs/script/features/iterationData.js +32 -0
  196. package/dist-cjs/script/features/iterationData.js.map +1 -0
  197. package/dist-cjs/script/features/legacyPostman.js +112 -0
  198. package/dist-cjs/script/features/legacyPostman.js.map +1 -0
  199. package/dist-cjs/script/features/log.js +347 -28
  200. package/dist-cjs/script/features/log.js.map +1 -1
  201. package/dist-cjs/script/features/tests.js +90 -64
  202. package/dist-cjs/script/features/tests.js.map +1 -1
  203. package/dist-cjs/script/features/timers.js +17 -5
  204. package/dist-cjs/script/features/timers.js.map +1 -1
  205. package/dist-cjs/script/features/variables.js +22 -6
  206. package/dist-cjs/script/features/variables.js.map +1 -1
  207. package/dist-cjs/script/features/visualizer.js +56 -0
  208. package/dist-cjs/script/features/visualizer.js.map +1 -0
  209. package/dist-cjs/script/isolated-runner.js +26 -2
  210. package/dist-cjs/script/isolated-runner.js.map +1 -1
  211. package/dist-cjs/script/legacy.js +14 -3
  212. package/dist-cjs/script/legacy.js.map +1 -1
  213. package/dist-cjs/script/pm-api-declarations.js +1969 -0
  214. package/dist-cjs/script/pm-api-declarations.js.map +1 -0
  215. package/dist-cjs/script/pm-api-metadata.js +336 -106
  216. package/dist-cjs/script/pm-api-metadata.js.map +1 -1
  217. package/dist-cjs/script/pm-api-reference.js +24 -8
  218. package/dist-cjs/script/pm-api-reference.js.map +1 -1
  219. package/dist-cjs/script/postman/chaiCompat.js +181 -0
  220. package/dist-cjs/script/postman/chaiCompat.js.map +1 -0
  221. package/dist-cjs/script/postman/cookies.js +170 -0
  222. package/dist-cjs/script/postman/cookies.js.map +1 -0
  223. package/dist-cjs/script/postman/modules.js +123 -0
  224. package/dist-cjs/script/postman/modules.js.map +1 -0
  225. package/dist-cjs/script/postman/proxies.js +93 -0
  226. package/dist-cjs/script/postman/proxies.js.map +1 -0
  227. package/dist-cjs/script/postman/requestAdapter.js +227 -0
  228. package/dist-cjs/script/postman/requestAdapter.js.map +1 -0
  229. package/dist-cjs/script/postman/responseAdapter.js +83 -0
  230. package/dist-cjs/script/postman/responseAdapter.js.map +1 -0
  231. package/dist-cjs/script/postman/runtime.js +132 -0
  232. package/dist-cjs/script/postman/runtime.js.map +1 -0
  233. package/dist-cjs/script/scope.js +47 -5
  234. package/dist-cjs/script/scope.js.map +1 -1
  235. package/dist-cjs/script/worker-entry.js +9 -0
  236. package/dist-cjs/script/worker-entry.js.map +1 -1
  237. package/dist-cjs/script/worker-pool.js +23 -2
  238. package/dist-cjs/script/worker-pool.js.map +1 -1
  239. package/dist-cjs/templating/generator-metadata.js +15 -1
  240. package/dist-cjs/templating/generator-metadata.js.map +1 -1
  241. package/dist-cjs/templating/postman-dynamic-catalog.js +129 -0
  242. package/dist-cjs/templating/postman-dynamic-catalog.js.map +1 -0
  243. package/dist-cjs/templating/postman-generators.js +13 -3
  244. package/dist-cjs/templating/postman-generators.js.map +1 -1
  245. package/dist-cjs/variables/replaceIn.js +111 -0
  246. package/dist-cjs/variables/replaceIn.js.map +1 -0
  247. package/package.json +12 -2
@@ -1 +1 @@
1
- {"version":3,"file":"tests.d.ts","sourceRoot":"","sources":["../../../src/script/features/tests.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AA2DjE,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,CACJ,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,CAAC,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,KACjD,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,WAAW,EAAE,gBAAgB,EAAE,CAAC;IAChC,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,gBAAgB,EAAE,MAAM,OAAO,CAAC;CACjC;AAOD,MAAM,WAAW,oBAAoB;IACnC,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC9B;AAED,eAAO,MAAM,kBAAkB,GAC7B,QAAQ,WAAW,EACnB,UAAS,oBAAyB,KACjC,aA4FF,CAAC"}
1
+ {"version":3,"file":"tests.d.ts","sourceRoot":"","sources":["../../../src/script/features/tests.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAqDjE,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,CAAC,CACL,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,IAAI,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,SAAS,KAC/E,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG;QACpB,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;QAC/C,KAAK,EAAE,MAAM,MAAM,CAAC;KACrB,CAAC;IACF,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IAC/C,WAAW,EAAE,gBAAgB,EAAE,CAAC;IAChC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,gBAAgB,EAAE,MAAM,OAAO,CAAC;CACjC;AAQD,MAAM,MAAM,oBAAoB,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAEzD,eAAO,MAAM,kBAAkB,GAC7B,QAAQ,WAAW,EACnB,WAAU,oBAAyB,KAClC,aAoIF,CAAC"}
@@ -1,18 +1,9 @@
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
- // 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.
4
+ // DisabledFeatureDependencyError is recognized and produces a SKIP test
5
+ // result with a descriptive error message.
14
6
  import { DisabledFeatureDependencyError } from "./feature-policy.js";
15
- import { PendingKafkaDependencyError } from "./kafka.js";
16
7
  // Errors thrown inside the vm context cross a realm boundary, which means
17
8
  // `error instanceof Error` from the host's perspective is FALSE even when
18
9
  // the value has a real .message property. Read the message structurally
@@ -30,7 +21,7 @@ const extractErrorMessage = (error) => {
30
21
  return String(error);
31
22
  };
32
23
  // Cross-realm error name extraction — used to recognize symbolically named
33
- // errors like PendingKafkaDependencyError that may arrive as cross-realm
24
+ // errors (DisabledFeatureDependencyError) that may arrive as cross-realm
34
25
  // values failing instanceof checks.
35
26
  const extractErrorName = (error) => {
36
27
  if (error instanceof Error) {
@@ -44,17 +35,13 @@ const extractErrorName = (error) => {
44
35
  }
45
36
  return "";
46
37
  };
47
- const isPendingKafkaError = (error) => error instanceof PendingKafkaDependencyError ||
48
- extractErrorName(error) === "PendingKafkaDependencyError";
49
38
  const isDisabledFeatureError = (error) => {
50
39
  if (error instanceof DisabledFeatureDependencyError) {
51
40
  return { feature: error.feature };
52
41
  }
53
42
  if (extractErrorName(error) === "DisabledFeatureDependencyError") {
54
43
  const feature = error.feature;
55
- if (feature === "database" || feature === "kafka") {
56
- return { feature };
57
- }
44
+ void feature;
58
45
  return { feature: "database" };
59
46
  }
60
47
  return null;
@@ -63,70 +50,110 @@ const normalizeName = (name) => {
63
50
  const trimmed = String(name ?? "").trim();
64
51
  return trimmed || "Unnamed test";
65
52
  };
66
- export const buildTestCollector = (_stage, options = {}) => {
53
+ export const buildTestCollector = (_stage, _options = {}) => {
67
54
  const orderedResults = [];
68
55
  const finalResults = [];
69
- const deferredTestNames = [];
70
56
  const pending = [];
71
- const selected = options.selectedTestNames ? new Set(options.selectedTestNames) : null;
72
57
  let activeCallbackCount = 0;
73
- const test = (name, fn) => {
58
+ const record = (index, name, error) => {
59
+ const disabled = isDisabledFeatureError(error);
60
+ if (disabled) {
61
+ orderedResults[index] = {
62
+ name,
63
+ status: "SKIP",
64
+ error: "Skipped because database execution is disabled for this collection runner.",
65
+ };
66
+ return;
67
+ }
68
+ orderedResults[index] = {
69
+ name,
70
+ status: "FAIL",
71
+ error: extractErrorMessage(error),
72
+ };
73
+ };
74
+ const isThenable = (value) => value !== null &&
75
+ (typeof value === "object" || typeof value === "function") &&
76
+ typeof value.then === "function";
77
+ // Postman runs the callback SYNCHRONOUSLY at the pm.test() call, so code
78
+ // after it observes whatever the test did; an async callback (returns a
79
+ // Promise) or a `done` callback (`function (done) {…}`) is tracked and
80
+ // awaited at flush time. The result keeps the call order either way.
81
+ const test = ((name, fn) => {
74
82
  const normalizedName = normalizeName(name);
75
- if (selected && !selected.has(normalizedName)) {
83
+ const resultIndex = orderedResults.push(null) - 1;
84
+ const pass = () => {
85
+ orderedResults[resultIndex] = { name: normalizedName, status: "PASS" };
86
+ };
87
+ if (typeof fn !== "function") {
88
+ record(resultIndex, normalizedName, new Error("pm.test requires a callback function"));
76
89
  return Promise.resolve();
77
90
  }
78
- const resultIndex = orderedResults.push(null) - 1;
79
- const task = Promise.resolve()
80
- .then(async () => {
81
- if (typeof fn !== "function") {
82
- throw new Error("pm.test requires a callback function");
91
+ activeCallbackCount += 1;
92
+ let task;
93
+ try {
94
+ if (fn.length > 0) {
95
+ // done-callback style.
96
+ task = new Promise((resolve) => {
97
+ let finished = false;
98
+ const done = (error) => {
99
+ if (finished)
100
+ return;
101
+ finished = true;
102
+ activeCallbackCount = Math.max(0, activeCallbackCount - 1);
103
+ if (error) {
104
+ record(resultIndex, normalizedName, error);
105
+ }
106
+ else {
107
+ pass();
108
+ }
109
+ resolve();
110
+ };
111
+ try {
112
+ fn(done);
113
+ }
114
+ catch (error) {
115
+ done(error ?? new Error("Test failed"));
116
+ }
117
+ });
83
118
  }
84
- activeCallbackCount += 1;
85
- try {
86
- await fn();
119
+ else {
120
+ const out = fn();
121
+ if (isThenable(out)) {
122
+ task = Promise.resolve(out).then(() => {
123
+ activeCallbackCount = Math.max(0, activeCallbackCount - 1);
124
+ pass();
125
+ }, (error) => {
126
+ activeCallbackCount = Math.max(0, activeCallbackCount - 1);
127
+ record(resultIndex, normalizedName, error);
128
+ });
129
+ }
130
+ else {
131
+ activeCallbackCount = Math.max(0, activeCallbackCount - 1);
132
+ pass();
133
+ task = Promise.resolve();
134
+ }
87
135
  }
88
- finally {
89
- activeCallbackCount = Math.max(0, activeCallbackCount - 1);
90
- }
91
- orderedResults[resultIndex] = {
92
- name: normalizedName,
93
- status: "PASS",
94
- };
95
- })
96
- .catch((error) => {
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] = {
114
- name: normalizedName,
115
- status: "FAIL",
116
- error: extractErrorMessage(error),
117
- };
118
- });
136
+ }
137
+ catch (error) {
138
+ activeCallbackCount = Math.max(0, activeCallbackCount - 1);
139
+ record(resultIndex, normalizedName, error);
140
+ task = Promise.resolve();
141
+ }
119
142
  pending.push(task);
120
143
  return task;
121
- };
144
+ });
145
+ // pm.test.skip(name[, fn]) — recorded as SKIP, the callback never runs.
122
146
  const skip = (name, reason) => {
123
147
  const result = {
124
148
  name: normalizeName(name),
125
149
  status: "SKIP",
126
- ...(reason ? { error: reason } : {}),
150
+ ...(typeof reason === "string" && reason ? { error: reason } : {}),
127
151
  };
128
152
  orderedResults.push(result);
129
153
  };
154
+ // pm.test.index() — how many tests the script has recorded so far.
155
+ const index = () => orderedResults.length;
156
+ Object.assign(test, { skip, index });
130
157
  const flush = async () => {
131
158
  await Promise.allSettled(pending);
132
159
  for (const entry of orderedResults) {
@@ -139,7 +166,6 @@ export const buildTestCollector = (_stage, options = {}) => {
139
166
  test,
140
167
  skip,
141
168
  testResults: finalResults,
142
- deferredTestNames,
143
169
  flush,
144
170
  isInsideCallback: () => activeCallbackCount > 0,
145
171
  };
@@ -1 +1 @@
1
- {"version":3,"file":"tests.js","sourceRoot":"","sources":["../../../src/script/features/tests.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tests.js","sourceRoot":"","sources":["../../../src/script/features/tests.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,9 @@ export interface TimerApi {
3
3
  clearTimeout: (id: unknown) => void;
4
4
  setInterval: (handler: unknown, delay?: unknown, ...args: unknown[]) => number;
5
5
  clearInterval: (id: unknown) => void;
6
+ /** Node's setImmediate — runs the handler on the next turn (as a 0 ms timer). */
7
+ setImmediate: (handler: unknown, ...args: unknown[]) => number;
8
+ clearImmediate: (id: unknown) => void;
6
9
  }
7
10
  export interface TimerFeature {
8
11
  api: TimerApi;
@@ -13,5 +16,8 @@ export interface TimerFeature {
13
16
  /** Number of currently-active timers (not yet fired or cleared). */
14
17
  activeCount(): number;
15
18
  }
16
- export declare const buildTimerFeature: () => TimerFeature;
19
+ /** Reports a throwing timer callback to the script's own console (so the user
20
+ * sees it) instead of the host's stderr. */
21
+ export type TimerErrorSink = (kind: "timeout" | "interval", error: unknown) => void;
22
+ export declare const buildTimerFeature: (onError?: TimerErrorSink) => TimerFeature;
17
23
  //# sourceMappingURL=timers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"timers.d.ts","sourceRoot":"","sources":["../../../src/script/features/timers.ts"],"names":[],"mappings":"AA2BA,MAAM,WAAW,QAAQ;IACvB,UAAU,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,MAAM,CAAC;IAC9E,YAAY,EAAE,CAAC,EAAE,EAAE,OAAO,KAAK,IAAI,CAAC;IACpC,WAAW,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,MAAM,CAAC;IAC/E,aAAa,EAAE,CAAC,EAAE,EAAE,OAAO,KAAK,IAAI,CAAC;CACtC;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,QAAQ,CAAC;IACd,oDAAoD;IACpD,OAAO,IAAI,IAAI,CAAC;IAChB,gEAAgE;IAChE,YAAY,IAAI,MAAM,CAAC;IACvB,oEAAoE;IACpE,WAAW,IAAI,MAAM,CAAC;CACvB;AAeD,eAAO,MAAM,iBAAiB,QAAO,YAsHpC,CAAC"}
1
+ {"version":3,"file":"timers.d.ts","sourceRoot":"","sources":["../../../src/script/features/timers.ts"],"names":[],"mappings":"AA2BA,MAAM,WAAW,QAAQ;IACvB,UAAU,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,MAAM,CAAC;IAC9E,YAAY,EAAE,CAAC,EAAE,EAAE,OAAO,KAAK,IAAI,CAAC;IACpC,WAAW,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,MAAM,CAAC;IAC/E,aAAa,EAAE,CAAC,EAAE,EAAE,OAAO,KAAK,IAAI,CAAC;IACrC,iFAAiF;IACjF,YAAY,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,MAAM,CAAC;IAC/D,cAAc,EAAE,CAAC,EAAE,EAAE,OAAO,KAAK,IAAI,CAAC;CACvC;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,QAAQ,CAAC;IACd,oDAAoD;IACpD,OAAO,IAAI,IAAI,CAAC;IAChB,gEAAgE;IAChE,YAAY,IAAI,MAAM,CAAC;IACvB,oEAAoE;IACpE,WAAW,IAAI,MAAM,CAAC;CACvB;AAeD;4CAC4C;AAC5C,MAAM,MAAM,cAAc,GAAG,CAAC,IAAI,EAAE,SAAS,GAAG,UAAU,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;AAEpF,eAAO,MAAM,iBAAiB,GAAI,UAAU,cAAc,KAAG,YAgI5D,CAAC"}
@@ -29,7 +29,7 @@ const clampDelay = (raw) => {
29
29
  return 0;
30
30
  return Math.min(n, MAX_TIMER_DELAY_MS);
31
31
  };
32
- export const buildTimerFeature = () => {
32
+ export const buildTimerFeature = (onError) => {
33
33
  const handles = new Map();
34
34
  let nextId = 1;
35
35
  let totalCreated = 0;
@@ -83,8 +83,13 @@ export const buildTimerFeature = () => {
83
83
  // to the executor's catch via Promise rejection. A timer
84
84
  // callback that throws after the script's main promise has
85
85
  // resolved is logged but doesn't blow up the host.
86
- // eslint-disable-next-line no-console
87
- console.error("Script timer callback threw:", error);
86
+ if (onError) {
87
+ onError("timeout", error);
88
+ }
89
+ else {
90
+ // eslint-disable-next-line no-console
91
+ console.error("Script timer callback threw:", error);
92
+ }
88
93
  }
89
94
  }, ms);
90
95
  handles.set(id, { hostId, kind: "timeout" });
@@ -118,8 +123,13 @@ export const buildTimerFeature = () => {
118
123
  handler(...args);
119
124
  }
120
125
  catch (error) {
121
- // eslint-disable-next-line no-console
122
- console.error("Script interval callback threw:", error);
126
+ if (onError) {
127
+ onError("interval", error);
128
+ }
129
+ else {
130
+ // eslint-disable-next-line no-console
131
+ console.error("Script interval callback threw:", error);
132
+ }
123
133
  }
124
134
  }, ms);
125
135
  handles.set(id, { hostId, kind: "interval" });
@@ -133,6 +143,8 @@ export const buildTimerFeature = () => {
133
143
  return;
134
144
  clear(numeric);
135
145
  },
146
+ setImmediate: (handler, ...args) => api.setTimeout(handler, 0, ...args),
147
+ clearImmediate: (id) => api.clearTimeout(id),
136
148
  };
137
149
  const dispose = () => {
138
150
  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;AA0BlC,MAAM,UAAU,GAAG,CAAC,GAAY,EAAU,EAAE;IAC1C,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IACtB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,CAAC,CAAC;IAC3C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC;AACzC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAiB,EAAE;IAClD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAuB,CAAC;IAC/C,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,IAAI,QAAQ,GAAG,KAAK,CAAC;IAErB,MAAM,OAAO,GAAG,GAAW,EAAE;QAC3B,MAAM,EAAE,GAAG,MAAM,CAAC;QAClB,MAAM,IAAI,CAAC,CAAC;QACZ,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC;IAEF,MAAM,KAAK,GAAG,CAAC,EAAU,EAAE,UAAU,GAAG,IAAI,EAAQ,EAAE;QACpD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC/B,IAAI,CAAC,MAAM;YAAE,OAAO;QACpB,IAAI,UAAU,EAAE,CAAC;YACf,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC9B,YAAY,CAAC,MAAM,CAAC,MAAkD,CAAC,CAAC;YAC1E,CAAC;iBAAM,CAAC;gBACN,aAAa,CAAC,MAAM,CAAC,MAAmD,CAAC,CAAC;YAC5E,CAAC;QACH,CAAC;QACD,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACrB,CAAC,CAAC;IAEF,MAAM,GAAG,GAAa;QACpB,UAAU,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,EAAE;YACtC,IAAI,QAAQ,EAAE,CAAC;gBACb,uDAAuD;gBACvD,4DAA4D;gBAC5D,2DAA2D;gBAC3D,OAAO,CAAC,CAAC;YACX,CAAC;YACD,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE,CAAC;gBAClC,MAAM,IAAI,SAAS,CAAC,kDAAkD,CAAC,CAAC;YAC1E,CAAC;YACD,IAAI,OAAO,CAAC,IAAI,IAAI,mBAAmB,EAAE,CAAC;gBACxC,MAAM,IAAI,KAAK,CACb,oDAAoD,mBAAmB,KAAK;oBAC1E,4DAA4D,CAC/D,CAAC;YACJ,CAAC;YACD,MAAM,EAAE,GAAG,OAAO,EAAE,CAAC;YACrB,YAAY,IAAI,CAAC,CAAC;YAClB,MAAM,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;YAC7B,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC7B,6DAA6D;gBAC7D,gEAAgE;gBAChE,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBACnB,IAAI,CAAC;oBACF,OAAwC,CAAC,GAAG,IAAI,CAAC,CAAC;gBACrD,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,4DAA4D;oBAC5D,yDAAyD;oBACzD,2DAA2D;oBAC3D,mDAAmD;oBACnD,sCAAsC;oBACtC,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC;gBACvD,CAAC;YACH,CAAC,EAAE,EAAE,CAAC,CAAC;YACP,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;YAC7C,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,YAAY,EAAE,CAAC,EAAE,EAAE,EAAE;YACnB,IAAI,QAAQ;gBAAE,OAAO;YACrB,MAAM,OAAO,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;YAC3B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC;gBAAE,OAAO;YACvC,KAAK,CAAC,OAAO,CAAC,CAAC;QACjB,CAAC;QACD,WAAW,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,EAAE;YACvC,IAAI,QAAQ;gBAAE,OAAO,CAAC,CAAC;YACvB,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE,CAAC;gBAClC,MAAM,IAAI,SAAS,CAAC,mDAAmD,CAAC,CAAC;YAC3E,CAAC;YACD,IAAI,OAAO,CAAC,IAAI,IAAI,mBAAmB,EAAE,CAAC;gBACxC,MAAM,IAAI,KAAK,CACb,qDAAqD,mBAAmB,IAAI,CAC7E,CAAC;YACJ,CAAC;YACD,MAAM,EAAE,GAAG,OAAO,EAAE,CAAC;YACrB,YAAY,IAAI,CAAC,CAAC;YAClB,+DAA+D;YAC/D,+DAA+D;YAC/D,mCAAmC;YACnC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;YAC1C,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,EAAE;gBAC9B,IAAI,CAAC;oBACF,OAAwC,CAAC,GAAG,IAAI,CAAC,CAAC;gBACrD,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,sCAAsC;oBACtC,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC,CAAC;gBAC1D,CAAC;YACH,CAAC,EAAE,EAAE,CAAC,CAAC;YACP,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;YAC9C,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,aAAa,EAAE,CAAC,EAAE,EAAE,EAAE;YACpB,IAAI,QAAQ;gBAAE,OAAO;YACrB,MAAM,OAAO,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;YAC3B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC;gBAAE,OAAO;YACvC,KAAK,CAAC,OAAO,CAAC,CAAC;QACjB,CAAC;KACF,CAAC;IAEF,MAAM,OAAO,GAAG,GAAS,EAAE;QACzB,IAAI,QAAQ;YAAE,OAAO;QACrB,QAAQ,GAAG,IAAI,CAAC;QAChB,KAAK,MAAM,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;YACrC,KAAK,CAAC,EAAE,CAAC,CAAC;QACZ,CAAC;IACH,CAAC,CAAC;IAEF,OAAO;QACL,GAAG;QACH,OAAO;QACP,YAAY,EAAE,GAAG,EAAE,CAAC,YAAY;QAChC,WAAW,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI;KAChC,CAAC;AACJ,CAAC,CAAC"}
1
+ {"version":3,"file":"timers.js","sourceRoot":"","sources":["../../../src/script/features/timers.ts"],"names":[],"mappings":"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"}
@@ -3,15 +3,30 @@ export interface VariablesApi {
3
3
  * runs so the next layer of the same request starts from it. */
4
4
  readonly localSnapshot?: () => Record<string, string>;
5
5
  has: (key: string) => boolean;
6
- get: (key: string) => string | undefined;
7
- set: (key: string, value: unknown) => void;
6
+ get: (key: string) => unknown;
7
+ set: (key: string, value: unknown, type?: unknown) => void;
8
8
  unset: (key: string) => void;
9
- toObject: () => Record<string, string>;
9
+ clear: () => void;
10
+ toObject: () => Record<string, unknown>;
11
+ /** Callman's original resolver: unresolved `{{x}}` become empty. */
10
12
  resolve: (input: unknown) => string;
11
- replaceIn: (input: unknown) => string;
13
+ /** Postman's `replaceIn`: unresolved `{{x}}` stay as written; objects and
14
+ * arrays are walked. */
15
+ replaceIn: (input: unknown) => unknown;
12
16
  }
13
17
  export declare const buildVariablesApi: (environment: Record<string, string>, globals: Record<string, string>, options?: {
14
18
  collectionVariables?: Record<string, string>;
19
+ /** The current iteration's data row (`pm.iterationData`) — between the
20
+ * local scope and the environment. */
21
+ iterationData?: Record<string, unknown>;
22
+ /** Live, typed views of the other scopes (a value a script set keeps its
23
+ * type: pm.environment.set("n", 7) → pm.variables.get("n") === 7). When
24
+ * absent the plain string snapshots above are used. */
25
+ live?: {
26
+ environment?: () => Record<string, unknown>;
27
+ globals?: () => Record<string, unknown>;
28
+ collection?: () => Record<string, unknown>;
29
+ };
15
30
  /** Local values set by an earlier script of the same request (layered
16
31
  * runs: collection → folder → request share one local scope). */
17
32
  local?: Record<string, string>;
@@ -1 +1 @@
1
- {"version":3,"file":"variables.d.ts","sourceRoot":"","sources":["../../../src/script/features/variables.ts"],"names":[],"mappings":"AAmBA,MAAM,WAAW,YAAY;IAC3B;qEACiE;IACjE,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtD,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;IAC9B,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IACzC,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAC3C,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,QAAQ,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,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,EAC/B,UAAS;IACP,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7C;sEACkE;IAClE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC3B,KACL,YA+CF,CAAC"}
1
+ {"version":3,"file":"variables.d.ts","sourceRoot":"","sources":["../../../src/script/features/variables.ts"],"names":[],"mappings":"AAoBA,MAAM,WAAW,YAAY;IAC3B;qEACiE;IACjE,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtD,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;IAC9B,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;IAC9B,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IAC3D,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,QAAQ,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,oEAAoE;IACpE,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,CAAC;IACpC;6BACyB;IACzB,SAAS,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC;CACxC;AASD,eAAO,MAAM,iBAAiB,GAC5B,aAAa,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACnC,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,UAAS;IACP,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7C;2CACuC;IACvC,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC;;4DAEwD;IACxD,IAAI,CAAC,EAAE;QACL,WAAW,CAAC,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC5C,OAAO,CAAC,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACxC,UAAU,CAAC,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAC5C,CAAC;IACF;sEACkE;IAClE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC3B,KACL,YA4DF,CAAC"}
@@ -15,6 +15,7 @@
15
15
  // `pm.variables.set(...)` and `pm.variables.get(...)` (a very common
16
16
  // Postman pattern) work without rewrites.
17
17
  import { resolveTemplate } from "../../variables/resolver.js";
18
+ import { lookupInRecords, replaceInValue } from "../../variables/replaceIn.js";
18
19
  const stringifyInput = (value) => {
19
20
  if (value === undefined || value === null) {
20
21
  return "";
@@ -26,14 +27,21 @@ export const buildVariablesApi = (environment, globals, options = {}) => {
26
27
  // here so they take precedence over env / globals for subsequent reads
27
28
  // in the same script execution, without polluting persistent state.
28
29
  const local = { ...(options.local ?? {}) };
30
+ // Values as the script wrote them (numbers, objects…) — `get` returns them
31
+ // unchanged inside the run; `local` is the string form handed back to hosts.
32
+ const localNative = {};
29
33
  const collection = options.collectionVariables ?? {};
34
+ const iteration = options.iterationData ?? {};
30
35
  // Precedence on read: local > environment > collection > globals —
31
36
  // Postman's documented order.
37
+ const live = options.live ?? {};
32
38
  const readMerged = () => ({
33
- ...globals,
34
- ...collection,
35
- ...environment,
39
+ ...(live.globals ? live.globals() : globals),
40
+ ...(live.collection ? live.collection() : collection),
41
+ ...(live.environment ? live.environment() : environment),
42
+ ...iteration,
36
43
  ...local,
44
+ ...localNative,
37
45
  });
38
46
  const resolve = (input) => resolveTemplate(stringifyInput(input), { env: readMerged() });
39
47
  return {
@@ -51,21 +59,29 @@ export const buildVariablesApi = (environment, globals, options = {}) => {
51
59
  const merged = readMerged();
52
60
  return merged[normalisedKey];
53
61
  },
54
- set: (key, value) => {
62
+ set: (key, value, _type) => {
55
63
  const normalisedKey = String(key ?? "").trim();
56
64
  if (!normalisedKey)
57
65
  return;
58
- local[normalisedKey] = stringifyInput(value);
66
+ local[normalisedKey] = typeof value === "object" && value !== null ? JSON.stringify(value) : stringifyInput(value);
67
+ localNative[normalisedKey] = value;
59
68
  },
60
69
  unset: (key) => {
61
70
  const normalisedKey = String(key ?? "").trim();
62
71
  if (!normalisedKey)
63
72
  return;
64
73
  delete local[normalisedKey];
74
+ delete localNative[normalisedKey];
75
+ },
76
+ clear: () => {
77
+ for (const key of Object.keys(local))
78
+ delete local[key];
79
+ for (const key of Object.keys(localNative))
80
+ delete localNative[key];
65
81
  },
66
82
  toObject: () => readMerged(),
67
83
  resolve,
68
- replaceIn: resolve,
84
+ replaceIn: (input) => replaceInValue(input, lookupInRecords(readMerged())),
69
85
  localSnapshot: () => ({ ...local }),
70
86
  };
71
87
  };
@@ -1 +1 @@
1
- {"version":3,"file":"variables.js","sourceRoot":"","sources":["../../../src/script/features/variables.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"variables.js","sourceRoot":"","sources":["../../../src/script/features/variables.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ export interface ScriptVisualizerPayload {
2
+ template: string;
3
+ data: unknown;
4
+ options: Record<string, unknown>;
5
+ }
6
+ export interface VisualizerFeature {
7
+ api: {
8
+ set: (template: unknown, data?: unknown, options?: unknown) => void;
9
+ clear: () => void;
10
+ };
11
+ getData: (callback?: (error: unknown, data: unknown) => void) => void;
12
+ payload: () => ScriptVisualizerPayload | undefined;
13
+ }
14
+ export declare const buildVisualizerFeature: () => VisualizerFeature;
15
+ //# sourceMappingURL=visualizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"visualizer.d.ts","sourceRoot":"","sources":["../../../src/script/features/visualizer.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE;QACH,GAAG,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;QACpE,KAAK,EAAE,MAAM,IAAI,CAAC;KACnB,CAAC;IACF,OAAO,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,KAAK,IAAI,KAAK,IAAI,CAAC;IACtE,OAAO,EAAE,MAAM,uBAAuB,GAAG,SAAS,CAAC;CACpD;AAaD,eAAO,MAAM,sBAAsB,QAAO,iBAgCzC,CAAC"}
@@ -0,0 +1,52 @@
1
+ // pm.visualizer — Postman's "Visualize" hook. A post-response/test script
2
+ // calls `pm.visualizer.set(template, data, options)` with a Handlebars HTML
3
+ // template and its data; the HOST renders the template (sandboxed) in a
4
+ // Visualize tab. Inside a visualizer template, `pm.getData(cb)` hands the data
5
+ // back to the template's own script — that part runs in the host's renderer,
6
+ // here `pm.getData` only exists so a copied script does not throw.
7
+ const MAX_TEMPLATE_BYTES = 2 * 1024 * 1024;
8
+ const cloneJson = (value) => {
9
+ if (value === undefined)
10
+ return undefined;
11
+ try {
12
+ return JSON.parse(JSON.stringify(value));
13
+ }
14
+ catch {
15
+ throw new Error("pm.visualizer.set: data must be JSON-serializable");
16
+ }
17
+ };
18
+ export const buildVisualizerFeature = () => {
19
+ let current;
20
+ return {
21
+ api: {
22
+ set: (template, data, options) => {
23
+ if (typeof template !== "string") {
24
+ throw new TypeError("pm.visualizer.set: template must be a string");
25
+ }
26
+ if (data !== undefined && (data === null || typeof data !== "object")) {
27
+ throw new TypeError("pm.visualizer.set: data must be an object");
28
+ }
29
+ if (options !== undefined && (options === null || typeof options !== "object")) {
30
+ throw new TypeError("pm.visualizer.set: options must be an object");
31
+ }
32
+ if (template.length > MAX_TEMPLATE_BYTES) {
33
+ throw new RangeError("pm.visualizer.set: template is too large (2 MB limit)");
34
+ }
35
+ current = {
36
+ template,
37
+ data: cloneJson(data) ?? {},
38
+ options: cloneJson(options) ?? {},
39
+ };
40
+ },
41
+ clear: () => {
42
+ current = undefined;
43
+ },
44
+ },
45
+ getData: (callback) => {
46
+ if (typeof callback === "function")
47
+ callback(null, current?.data ?? {});
48
+ },
49
+ payload: () => current,
50
+ };
51
+ };
52
+ //# 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;AAEF,MAAM,CAAC,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"}
@@ -1,5 +1,5 @@
1
1
  import type { AbortLikeSignal } from "../scenario-runner/types.js";
2
- import type { ExecuteScriptInput, ExecuteScriptResult, ScriptCapabilities, SendRequestExecutor } from "./types.js";
2
+ import type { ExecuteScriptInput, ExecuteScriptResult, ScriptCapabilities, ScriptLogEntry, SendRequestExecutor } from "./types.js";
3
3
  import type { ScriptWorkerPool } from "./worker-pool.js";
4
4
  export interface RunScriptIsolatedOptions {
5
5
  /** Host HTTP executor for pm.sendRequest. When provided, the worker routes
@@ -7,6 +7,9 @@ export interface RunScriptIsolatedOptions {
7
7
  onSendRequest?: SendRequestExecutor;
8
8
  /** External cancellation (e.g. scenario run aborted / node timeout). */
9
9
  signal?: AbortLikeSignal;
10
+ /** Receives every console/pm.log entry as the worker produces it (also
11
+ * picked up from `capabilities.extensions.log.onEntry`). */
12
+ onLog?: (entry: ScriptLogEntry) => void;
10
13
  /** Run on a warm pooled worker (see worker-pool.ts) instead of spawning a
11
14
  * fresh Worker per call. Long-running hosts (the backend scenario worker)
12
15
  * pass one; the desktop keeps the one-shot path. */
@@ -1 +1 @@
1
- {"version":3,"file":"isolated-runner.d.ts","sourceRoot":"","sources":["../../src/script/isolated-runner.ts"],"names":[],"mappings":"AA2BA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,KAAK,EACV,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAQzD,MAAM,WAAW,wBAAwB;IACvC;+DAC2D;IAC3D,aAAa,CAAC,EAAE,mBAAmB,CAAC;IACpC,wEAAwE;IACxE,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB;;yDAEqD;IACrD,IAAI,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAC;CAChC;AAKD,eAAO,MAAM,oBAAoB,GAAI,cAAc,kBAAkB,KAAG,kBAcvE,CAAC;AAkBF,eAAO,MAAM,iBAAiB,GAC5B,OAAO,kBAAkB,EACzB,UAAS,wBAA6B,KACrC,OAAO,CAAC,mBAAmB,CAqI7B,CAAC"}
1
+ {"version":3,"file":"isolated-runner.d.ts","sourceRoot":"","sources":["../../src/script/isolated-runner.ts"],"names":[],"mappings":"AA2BA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,KAAK,EACV,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,cAAc,EACd,mBAAmB,EACpB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAQzD,MAAM,WAAW,wBAAwB;IACvC;+DAC2D;IAC3D,aAAa,CAAC,EAAE,mBAAmB,CAAC;IACpC,wEAAwE;IACxE,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB;iEAC6D;IAC7D,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;IACxC;;yDAEqD;IACrD,IAAI,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAC;CAChC;AAKD,eAAO,MAAM,oBAAoB,GAAI,cAAc,kBAAkB,KAAG,kBAmBvE,CAAC;AAkBF,eAAO,MAAM,iBAAiB,GAC5B,OAAO,kBAAkB,EACzB,UAAS,wBAA6B,KACrC,OAAO,CAAC,mBAAmB,CAyJ7B,CAAC"}