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
@@ -0,0 +1,106 @@
1
+ // Postman's legacy scripting surface — what exported collections from before
2
+ // `pm.*` still contain, and what Postman keeps supporting unless a script
3
+ // opts out with a leading `"use sandbox2";`:
4
+ //
5
+ // postman.setEnvironmentVariable / getEnvironmentVariable / clearEnvironmentVariable(s)
6
+ // postman.setGlobalVariable / getGlobalVariable / clearGlobalVariable(s)
7
+ // postman.setNextRequest · postman.getResponseHeader / getResponseCookie
8
+ // tests["name"] = bool → recorded like pm.test
9
+ // responseBody · responseCode {code,name,detail} · responseTime
10
+ // responseHeaders · responseCookies · iteration · data
11
+ //
12
+ // `environment` and `globals` are hybrids: `environment["token"]` reads the
13
+ // variable (legacy snapshot) while `environment.get("token")` keeps working.
14
+ const SANDBOX2 = /^\s*(?:\/\/[^\n]*\n|\/\*[\s\S]*?\*\/|\s)*(['"])use sandbox2\1/;
15
+ export const scriptOptsOutOfLegacy = (script) => SANDBOX2.test(script);
16
+ /** Property reads fall through to variable values; real API members win. */
17
+ export const hybridScope = (api, valuesOf) => new Proxy(api, {
18
+ get(target, property, receiver) {
19
+ if (typeof property !== "string" || property in target) {
20
+ return Reflect.get(target, property, receiver);
21
+ }
22
+ return valuesOf()[property];
23
+ },
24
+ set(target, property, value) {
25
+ if (typeof property === "string" && !(property in target) && typeof target.set === "function") {
26
+ target.set(property, value);
27
+ return true;
28
+ }
29
+ target[property] = value;
30
+ return true;
31
+ },
32
+ has(target, property) {
33
+ return property in target || (typeof property === "string" && property in valuesOf());
34
+ },
35
+ deleteProperty(target, property) {
36
+ if (typeof property === "string" && typeof target.unset === "function") {
37
+ target.unset(property);
38
+ }
39
+ return true;
40
+ },
41
+ });
42
+ const REASONS = {
43
+ 200: "OK", 201: "Created", 202: "Accepted", 204: "No Content", 301: "Moved Permanently", 302: "Found",
44
+ 304: "Not Modified", 400: "Bad Request", 401: "Unauthorized", 403: "Forbidden", 404: "Not Found",
45
+ 405: "Method Not Allowed", 409: "Conflict", 422: "Unprocessable Entity", 429: "Too Many Requests",
46
+ 500: "Internal Server Error", 502: "Bad Gateway", 503: "Service Unavailable", 504: "Gateway Timeout",
47
+ };
48
+ export const buildLegacyGlobals = (input) => {
49
+ const { pm, environmentApi, globalsApi, response, testFn } = input;
50
+ const out = {};
51
+ if (environmentApi) {
52
+ out.environment = hybridScope(environmentApi, () => environmentApi.values);
53
+ }
54
+ if (globalsApi) {
55
+ out.globals = hybridScope(globalsApi, () => globalsApi.values);
56
+ }
57
+ out.data = input.iterationDataValues;
58
+ out.iteration = pm.info?.iteration ?? 0;
59
+ const postman = {
60
+ setEnvironmentVariable: (key, value) => environmentApi?.set(key, value === undefined || value === null ? value : String(value)),
61
+ getEnvironmentVariable: (key) => environmentApi?.get(key),
62
+ clearEnvironmentVariable: (key) => environmentApi?.unset(key),
63
+ clearEnvironmentVariables: () => environmentApi?.clear(),
64
+ setGlobalVariable: (key, value) => globalsApi?.set(key, value === undefined || value === null ? value : String(value)),
65
+ getGlobalVariable: (key) => globalsApi?.get(key),
66
+ clearGlobalVariable: (key) => globalsApi?.unset(key),
67
+ clearGlobalVariables: () => globalsApi?.clear(),
68
+ setNextRequest: (name) => pm.execution?.setNextRequest?.(name),
69
+ getResponseHeader: (name) => pm.response?.headers?.get?.(name),
70
+ getResponseCookie: (name) => pm.response?.cookies?.one?.(name),
71
+ };
72
+ out.postman = postman;
73
+ // tests["name"] = true|false — recorded as pm.test results.
74
+ out.tests = new Proxy({}, {
75
+ set(_target, property, value) {
76
+ if (typeof property === "string") {
77
+ testFn(property, () => {
78
+ if (!value) {
79
+ throw new Error(`Assertion failed: tests["${property}"] is ${String(value)}`);
80
+ }
81
+ });
82
+ }
83
+ return true;
84
+ },
85
+ });
86
+ if (response) {
87
+ out.responseBody = response.rawBody;
88
+ out.responseCode = {
89
+ code: response.status,
90
+ name: response.statusText || REASONS[response.status] || "",
91
+ detail: response.statusText || REASONS[response.status] || "",
92
+ };
93
+ out.responseTime = response.durationMs;
94
+ out.responseHeaders = response.headers;
95
+ const cookies = {};
96
+ for (const line of response.cookies) {
97
+ const pair = line.split(";")[0] ?? "";
98
+ const eq = pair.indexOf("=");
99
+ if (eq > 0)
100
+ cookies[pair.slice(0, eq).trim()] = pair.slice(eq + 1).trim();
101
+ }
102
+ out.responseCookies = cookies;
103
+ }
104
+ return out;
105
+ };
106
+ //# sourceMappingURL=legacyPostman.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"legacyPostman.js","sourceRoot":"","sources":["../../../src/script/features/legacyPostman.ts"],"names":[],"mappings":"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"}
@@ -1,15 +1,42 @@
1
+ interface NodeUtilLike {
2
+ inspect: (value: unknown, options?: Record<string, unknown>) => string;
3
+ formatWithOptions: (options: Record<string, unknown>, ...args: unknown[]) => string;
4
+ }
5
+ export declare const registerNodeUtil: (util: NodeUtilLike | null) => void;
1
6
  import type { ScriptLogEntry } from "../types.js";
7
+ export declare const stringifyLogArgument: (value: unknown) => string;
8
+ export declare const formatLogArguments: (args: unknown[]) => string;
9
+ export interface ScriptConsoleApi {
10
+ log: (...args: unknown[]) => void;
11
+ info: (...args: unknown[]) => void;
12
+ warn: (...args: unknown[]) => void;
13
+ error: (...args: unknown[]) => void;
14
+ debug: (...args: unknown[]) => void;
15
+ trace: (...args: unknown[]) => void;
16
+ assert: (condition?: unknown, ...args: unknown[]) => void;
17
+ count: (label?: unknown) => void;
18
+ countReset: (label?: unknown) => void;
19
+ time: (label?: unknown) => void;
20
+ timeLog: (label?: unknown, ...args: unknown[]) => void;
21
+ timeEnd: (label?: unknown) => void;
22
+ group: (...args: unknown[]) => void;
23
+ groupCollapsed: (...args: unknown[]) => void;
24
+ groupEnd: () => void;
25
+ table: (data?: unknown, columns?: unknown) => void;
26
+ dir: (value?: unknown, options?: unknown) => void;
27
+ dirxml: (...args: unknown[]) => void;
28
+ clear: () => void;
29
+ }
2
30
  export interface LogCollector {
3
31
  pmLog: (...args: unknown[]) => void;
4
- consoleApi: {
5
- log: (...args: unknown[]) => void;
6
- info: (...args: unknown[]) => void;
7
- warn: (...args: unknown[]) => void;
8
- error: (...args: unknown[]) => void;
9
- debug: (...args: unknown[]) => void;
10
- };
32
+ consoleApi: ScriptConsoleApi;
11
33
  logs: ScriptLogEntry[];
12
34
  }
13
- export declare const createLogCollector: () => LogCollector;
35
+ export interface LogCollectorOptions {
36
+ /** Called for every entry the moment it is produced (streaming hosts). */
37
+ onEntry?: (entry: ScriptLogEntry) => void;
38
+ }
39
+ export declare const createLogCollector: (options?: LogCollectorOptions) => LogCollector;
14
40
  export declare const createSilentLogCollector: () => LogCollector;
41
+ export {};
15
42
  //# sourceMappingURL=log.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"log.d.ts","sourceRoot":"","sources":["../../../src/script/features/log.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAsBlD,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACpC,UAAU,EAAE;QACV,GAAG,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;QAClC,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;QACnC,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;QACnC,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;QACpC,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;KACrC,CAAC;IACF,IAAI,EAAE,cAAc,EAAE,CAAC;CACxB;AAUD,eAAO,MAAM,kBAAkB,QAAO,YAkCrC,CAAC;AAKF,eAAO,MAAM,wBAAwB,QAAO,YAU1C,CAAC"}
1
+ {"version":3,"file":"log.d.ts","sourceRoot":"","sources":["../../../src/script/features/log.ts"],"names":[],"mappings":"AAcA,UAAU,YAAY;IACpB,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,CAAC;IACvE,iBAAiB,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,MAAM,CAAC;CACrF;AAID,eAAO,MAAM,gBAAgB,GAAI,MAAM,YAAY,GAAG,IAAI,KAAG,IAE5D,CAAC;AAcF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAqElD,eAAO,MAAM,oBAAoB,GAAI,OAAO,OAAO,KAAG,MA2BrD,CAAC;AAIF,eAAO,MAAM,kBAAkB,GAAI,MAAM,OAAO,EAAE,KAAG,MAKpD,CAAC;AA6FF,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IAClC,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACnC,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACnC,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACpC,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACpC,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACpC,MAAM,EAAE,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IAC1D,KAAK,EAAE,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACjC,UAAU,EAAE,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IAChC,OAAO,EAAE,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACvD,OAAO,EAAE,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACnC,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACpC,cAAc,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IAC7C,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACnD,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IAClD,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACrC,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACpC,UAAU,EAAE,gBAAgB,CAAC;IAC7B,IAAI,EAAE,cAAc,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,mBAAmB;IAClC,0EAA0E;IAC1E,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;CAC3C;AAqBD,eAAO,MAAM,kBAAkB,GAAI,UAAS,mBAAwB,KAAG,YAyJtE,CAAC;AAOF,eAAO,MAAM,wBAAwB,QAAO,YAwB1C,CAAC"}
@@ -1,8 +1,89 @@
1
- // Log collector for pm.log + console.{log,info,warn,error,debug}.
1
+ // Log collector for pm.log + the full `console` API (log, info, warn, error,
2
+ // debug, trace, assert, count, countReset, time, timeLog, timeEnd, group,
3
+ // groupCollapsed, groupEnd, table, dir, dirxml, clear).
4
+ //
2
5
  // Captures user-script output as structured entries so callers can render
3
6
  // them in scenario UIs / CLI reports without granting the script real
4
- // access to the host's stdio.
5
- const stringifyArgument = (value) => {
7
+ // access to the host's stdio. Hosts that want output while the script is
8
+ // still running (a worker that may be killed on timeout) pass
9
+ // `extensions.log = { onEntry }` and receive every entry as it is produced.
10
+ let nodeUtil = null;
11
+ export const registerNodeUtil = (util) => {
12
+ nodeUtil = util;
13
+ };
14
+ const inspect = (value, options) => {
15
+ if (nodeUtil)
16
+ return nodeUtil.inspect(value, options);
17
+ try {
18
+ return JSON.stringify(value) ?? String(value);
19
+ }
20
+ catch {
21
+ return String(value);
22
+ }
23
+ };
24
+ const formatWithOptions = (options, ...args) => nodeUtil ? nodeUtil.formatWithOptions(options, ...args) : args.map((entry) => stringifyLogArgument(entry)).join(" ");
25
+ const INSPECT_OPTIONS = {
26
+ depth: 4,
27
+ maxArrayLength: 100,
28
+ maxStringLength: 4096,
29
+ breakLength: 100,
30
+ colors: false,
31
+ };
32
+ const isNativeError = (value) =>
33
+ // Cross-realm safe: values created inside the vm context fail
34
+ // `instanceof Error` against the host's Error.
35
+ Object.prototype.toString.call(value) === "[object Error]";
36
+ const USER_FRAME = /(?:callman-script|[\w.-]+\.script)\.js:\d+/;
37
+ // An Error's stack from inside the sandbox ends with host frames (node:vm,
38
+ // executor.js, the worker bootstrap) — noise a script author can't act on.
39
+ // Keep the message lines and the frames that point into their own script.
40
+ const userStack = (error) => {
41
+ const stack = error.stack ?? `${error.name}: ${error.message}`;
42
+ const lines = stack.split("\n");
43
+ return lines.filter((line) => !/^\s+at /.test(line) || USER_FRAME.test(line)).join("\n");
44
+ };
45
+ const isPlainContainer = (value) => {
46
+ if (value === null || typeof value !== "object") {
47
+ return false;
48
+ }
49
+ const tag = Object.prototype.toString.call(value);
50
+ if (tag === "[object Array]") {
51
+ return true;
52
+ }
53
+ if (tag !== "[object Object]") {
54
+ return false;
55
+ }
56
+ const proto = Object.getPrototypeOf(value);
57
+ return proto === null || proto.constructor?.name === "Object";
58
+ };
59
+ // JSON.stringify drops functions/symbols/undefined and throws on bigint and
60
+ // cycles. This replacer keeps them visible so `console.log({ fn, n: 1n })`
61
+ // shows what the script actually holds instead of silently losing keys.
62
+ const jsonReplacer = (_key, value) => {
63
+ switch (typeof value) {
64
+ case "function":
65
+ return `[Function: ${value.name || "anonymous"}]`;
66
+ case "symbol":
67
+ return value.toString();
68
+ case "bigint":
69
+ return `${value.toString()}n`;
70
+ case "undefined":
71
+ return "[undefined]";
72
+ default:
73
+ break;
74
+ }
75
+ if (value !== null && typeof value === "object") {
76
+ const tag = Object.prototype.toString.call(value);
77
+ if (tag === "[object Map]" || tag === "[object Set]" || tag === "[object Date]") {
78
+ return inspect(value, INSPECT_OPTIONS);
79
+ }
80
+ if (isNativeError(value)) {
81
+ return userStack(value);
82
+ }
83
+ }
84
+ return value;
85
+ };
86
+ export const stringifyLogArgument = (value) => {
6
87
  if (typeof value === "string") {
7
88
  return value;
8
89
  }
@@ -12,15 +93,112 @@ const stringifyArgument = (value) => {
12
93
  if (typeof value === "undefined") {
13
94
  return "undefined";
14
95
  }
15
- if (value instanceof Error) {
16
- return value.stack ?? value.message;
96
+ if (typeof value === "bigint") {
97
+ return `${value.toString()}n`;
17
98
  }
18
- try {
19
- return JSON.stringify(value, null, 2);
99
+ if (isNativeError(value)) {
100
+ return userStack(value);
20
101
  }
21
- catch {
22
- return String(value);
102
+ if (isPlainContainer(value)) {
103
+ try {
104
+ const json = JSON.stringify(value, jsonReplacer, 2);
105
+ if (json !== undefined) {
106
+ return json;
107
+ }
108
+ }
109
+ catch {
110
+ // Circular structure etc. — fall through to util.inspect below.
111
+ }
112
+ }
113
+ return inspect(value, INSPECT_OPTIONS);
114
+ };
115
+ const FORMAT_SPECIFIER = /%[sdifjoOc%]/;
116
+ export const formatLogArguments = (args) => {
117
+ if (args.length > 1 && typeof args[0] === "string" && FORMAT_SPECIFIER.test(args[0])) {
118
+ return formatWithOptions(INSPECT_OPTIONS, ...args);
119
+ }
120
+ return args.map((entry) => stringifyLogArgument(entry)).join(" ");
121
+ };
122
+ // --- console.table ------------------------------------------------------
123
+ const cell = (value) => {
124
+ if (typeof value === "string") {
125
+ return inspect(value, { ...INSPECT_OPTIONS, colors: false });
126
+ }
127
+ return inspect(value, { ...INSPECT_OPTIONS, depth: 0, breakLength: Infinity });
128
+ };
129
+ const renderTable = (head, rows) => {
130
+ const widths = head.map((title, column) => Math.max(title.length, ...rows.map((row) => (row[column] ?? "").length)) + 2);
131
+ const center = (text, width) => {
132
+ const total = width - text.length;
133
+ const left = Math.floor(total / 2);
134
+ return `${" ".repeat(left)}${text}${" ".repeat(total - left)}`;
135
+ };
136
+ const line = (left, mid, right) => `${left}${widths.map((width) => "─".repeat(width)).join(mid)}${right}`;
137
+ const rowLine = (cells) => `│${cells.map((text, column) => center(text, widths[column] ?? text.length + 2)).join("│")}│`;
138
+ return [
139
+ line("┌", "┬", "┐"),
140
+ rowLine(head),
141
+ line("├", "┼", "┤"),
142
+ ...rows.map((row) => rowLine(head.map((_, column) => row[column] ?? ""))),
143
+ line("└", "┴", "┘"),
144
+ ].join("\n");
145
+ };
146
+ const formatTable = (data, columns) => {
147
+ if (data === null || typeof data !== "object") {
148
+ return null;
149
+ }
150
+ const tag = Object.prototype.toString.call(data);
151
+ const isMap = tag === "[object Map]";
152
+ const isSet = tag === "[object Set]";
153
+ let entries;
154
+ let indexHeader = "(index)";
155
+ if (isMap) {
156
+ indexHeader = "(iteration index)";
157
+ entries = Array.from(data.entries()).map(([key, value], index) => [
158
+ String(index),
159
+ { Key: key, Values: value },
160
+ ]);
161
+ }
162
+ else if (isSet) {
163
+ indexHeader = "(iteration index)";
164
+ entries = Array.from(data.values()).map((value, index) => [String(index), value]);
165
+ }
166
+ else if (Array.isArray(data)) {
167
+ entries = data.map((value, index) => [String(index), value]);
23
168
  }
169
+ else {
170
+ entries = Object.keys(data).map((key) => [
171
+ key,
172
+ data[key],
173
+ ]);
174
+ }
175
+ const wanted = Array.isArray(columns) ? columns.map(String) : null;
176
+ const keys = [];
177
+ let hasValues = false;
178
+ const records = entries.map(([, value]) => {
179
+ if (value !== null && typeof value === "object" && !isNativeError(value)) {
180
+ const record = value;
181
+ for (const key of Object.keys(record)) {
182
+ if (!keys.includes(key)) {
183
+ keys.push(key);
184
+ }
185
+ }
186
+ return record;
187
+ }
188
+ hasValues = true;
189
+ return null;
190
+ });
191
+ const shownKeys = wanted ?? keys;
192
+ const head = [indexHeader, ...shownKeys, ...(hasValues ? ["Values"] : [])];
193
+ const rows = entries.map(([index, value], rowIndex) => {
194
+ const record = records[rowIndex];
195
+ return [
196
+ index,
197
+ ...shownKeys.map((key) => record && Object.prototype.hasOwnProperty.call(record, key) ? cell(record[key]) : ""),
198
+ ...(hasValues ? [record ? "" : cell(value)] : []),
199
+ ];
200
+ });
201
+ return renderTable(head, rows);
24
202
  };
25
203
  // Hard caps so a runaway script (e.g. `while (true) { console.log("x") }`)
26
204
  // cannot exhaust host memory or produce a multi-gigabyte result payload.
@@ -29,49 +207,187 @@ const stringifyArgument = (value) => {
29
207
  // the host drowning in allocations first.
30
208
  const MAX_LOG_ENTRIES = 1000;
31
209
  const MAX_MESSAGE_LENGTH = 8192;
32
- export const createLogCollector = () => {
210
+ const MAX_LABELS = 200;
211
+ const labelOf = (value) => (value === undefined ? "default" : String(value));
212
+ const monotonicNow = () => typeof performance !== "undefined" && typeof performance.now === "function"
213
+ ? performance.now()
214
+ : Date.now();
215
+ const formatDuration = (ms) => ms >= 1000 ? `${(ms / 1000).toFixed(3)}s` : `${ms.toFixed(3)}ms`;
216
+ export const createLogCollector = (options = {}) => {
33
217
  const logs = [];
218
+ const counters = new Map();
219
+ const timers = new Map();
220
+ let groupDepth = 0;
34
221
  let truncated = false;
35
- const append = (level, args) => {
222
+ const push = (entry) => {
223
+ logs.push(entry);
224
+ if (options.onEntry) {
225
+ try {
226
+ options.onEntry(entry);
227
+ }
228
+ catch {
229
+ // A broken streaming sink must never fail the user's script.
230
+ }
231
+ }
232
+ };
233
+ const emit = (level, text, extra) => {
36
234
  if (logs.length >= MAX_LOG_ENTRIES) {
37
235
  if (!truncated) {
38
236
  truncated = true;
39
- logs.push({
237
+ push({
40
238
  level: "warn",
41
239
  message: `… log output truncated (limit of ${MAX_LOG_ENTRIES} entries reached)`,
42
240
  });
43
241
  }
44
242
  return;
45
243
  }
46
- let message = args.map((entry) => stringifyArgument(entry)).join(" ");
244
+ let message = text;
47
245
  if (message.length > MAX_MESSAGE_LENGTH) {
48
246
  message = `${message.slice(0, MAX_MESSAGE_LENGTH)}… (truncated)`;
49
247
  }
50
- logs.push({ level, message });
248
+ if (groupDepth > 0) {
249
+ const indent = " ".repeat(groupDepth);
250
+ message = message
251
+ .split("\n")
252
+ .map((line) => `${indent}${line}`)
253
+ .join("\n");
254
+ }
255
+ push({ level, message, ...extra });
256
+ };
257
+ const append = (level, args) => {
258
+ emit(level, formatLogArguments(args));
259
+ };
260
+ const consoleApi = {
261
+ log: (...args) => append("log", args),
262
+ info: (...args) => append("info", args),
263
+ warn: (...args) => append("warn", args),
264
+ error: (...args) => append("error", args),
265
+ debug: (...args) => append("debug", args),
266
+ trace: (...args) => {
267
+ const stack = userStack(new Error()).split("\n").slice(1).join("\n");
268
+ emit("debug", `Trace${args.length > 0 ? `: ${formatLogArguments(args)}` : ""}${stack ? `\n${stack}` : ""}`);
269
+ },
270
+ assert: (condition, ...args) => {
271
+ if (condition) {
272
+ return;
273
+ }
274
+ emit("error", args.length > 0 ? `Assertion failed: ${formatLogArguments(args)}` : "Assertion failed");
275
+ },
276
+ count: (label) => {
277
+ const key = labelOf(label);
278
+ if (!counters.has(key) && counters.size >= MAX_LABELS) {
279
+ return;
280
+ }
281
+ const next = (counters.get(key) ?? 0) + 1;
282
+ counters.set(key, next);
283
+ emit("log", `${key}: ${next}`);
284
+ },
285
+ countReset: (label) => {
286
+ const key = labelOf(label);
287
+ if (!counters.has(key)) {
288
+ emit("warn", `Count for '${key}' does not exist`);
289
+ return;
290
+ }
291
+ counters.set(key, 0);
292
+ },
293
+ time: (label) => {
294
+ const key = labelOf(label);
295
+ if (timers.has(key)) {
296
+ emit("warn", `Label '${key}' already exists for console.time()`);
297
+ return;
298
+ }
299
+ if (timers.size >= MAX_LABELS) {
300
+ return;
301
+ }
302
+ timers.set(key, monotonicNow());
303
+ },
304
+ timeLog: (label, ...args) => {
305
+ const key = labelOf(label);
306
+ const started = timers.get(key);
307
+ if (started === undefined) {
308
+ emit("warn", `No such label '${key}' for console.timeLog()`);
309
+ return;
310
+ }
311
+ const extra = args.length > 0 ? ` ${formatLogArguments(args)}` : "";
312
+ emit("log", `${key}: ${formatDuration(monotonicNow() - started)}${extra}`);
313
+ },
314
+ timeEnd: (label) => {
315
+ const key = labelOf(label);
316
+ const started = timers.get(key);
317
+ if (started === undefined) {
318
+ emit("warn", `No such label '${key}' for console.timeEnd()`);
319
+ return;
320
+ }
321
+ timers.delete(key);
322
+ emit("log", `${key}: ${formatDuration(monotonicNow() - started)}`);
323
+ },
324
+ group: (...args) => {
325
+ if (args.length > 0) {
326
+ append("log", args);
327
+ }
328
+ groupDepth += 1;
329
+ },
330
+ groupCollapsed: (...args) => {
331
+ if (args.length > 0) {
332
+ append("log", args);
333
+ }
334
+ groupDepth += 1;
335
+ },
336
+ groupEnd: () => {
337
+ groupDepth = Math.max(0, groupDepth - 1);
338
+ },
339
+ table: (data, columns) => {
340
+ const table = formatTable(data, columns);
341
+ if (table === null) {
342
+ append("log", [data]);
343
+ return;
344
+ }
345
+ emit("log", table);
346
+ },
347
+ dir: (value, dirOptions) => {
348
+ const depth = dirOptions !== null && typeof dirOptions === "object" && "depth" in dirOptions
349
+ ? (dirOptions.depth ?? null)
350
+ : 2;
351
+ emit("log", inspect(value, { ...INSPECT_OPTIONS, depth }));
352
+ },
353
+ dirxml: (...args) => append("log", args),
354
+ clear: () => {
355
+ groupDepth = 0;
356
+ emit("log", "Console was cleared", { clear: true });
357
+ },
51
358
  };
52
359
  return {
53
360
  pmLog: (...args) => append("log", args),
54
- consoleApi: {
55
- log: (...args) => append("log", args),
56
- info: (...args) => append("info", args),
57
- warn: (...args) => append("warn", args),
58
- error: (...args) => append("error", args),
59
- debug: (...args) => append("debug", args),
60
- },
361
+ consoleApi,
61
362
  logs,
62
363
  };
63
364
  };
365
+ const noop = () => undefined;
64
366
  // Silent collector — used when the caller did not enable the `log` extension.
65
367
  // pm.log and console.* still need to exist on the scope (so user scripts
66
368
  // don't throw ReferenceError); they just become no-ops with no output.
67
369
  export const createSilentLogCollector = () => ({
68
- pmLog: () => undefined,
370
+ pmLog: noop,
69
371
  consoleApi: {
70
- log: () => undefined,
71
- info: () => undefined,
72
- warn: () => undefined,
73
- error: () => undefined,
74
- debug: () => undefined,
372
+ log: noop,
373
+ info: noop,
374
+ warn: noop,
375
+ error: noop,
376
+ debug: noop,
377
+ trace: noop,
378
+ assert: noop,
379
+ count: noop,
380
+ countReset: noop,
381
+ time: noop,
382
+ timeLog: noop,
383
+ timeEnd: noop,
384
+ group: noop,
385
+ groupCollapsed: noop,
386
+ groupEnd: noop,
387
+ table: noop,
388
+ dir: noop,
389
+ dirxml: noop,
390
+ clear: noop,
75
391
  },
76
392
  logs: [],
77
393
  });
@@ -1 +1 @@
1
- {"version":3,"file":"log.js","sourceRoot":"","sources":["../../../src/script/features/log.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"log.js","sourceRoot":"","sources":["../../../src/script/features/log.ts"],"names":[],"mappings":"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"}
@@ -1,15 +1,14 @@
1
1
  import type { ScriptStage, ScriptTestResult } from "../types.js";
2
2
  export interface TestCollector {
3
- test: (name: string, fn: ((() => unknown | Promise<unknown>) | undefined)) => Promise<void>;
4
- skip: (name: string, reason?: string) => void;
3
+ test: ((name: string, fn: ((done?: (error?: unknown) => void) => unknown | Promise<unknown>) | undefined) => Promise<void>) & {
4
+ skip: (name: string, reason?: unknown) => void;
5
+ index: () => number;
6
+ };
7
+ skip: (name: string, reason?: unknown) => void;
5
8
  testResults: ScriptTestResult[];
6
- deferredTestNames: string[];
7
9
  flush: () => Promise<void>;
8
10
  isInsideCallback: () => boolean;
9
11
  }
10
- export interface TestCollectorOptions {
11
- allowDeferredKafkaTests?: boolean;
12
- selectedTestNames?: string[];
13
- }
14
- export declare const buildTestCollector: (_stage: ScriptStage, options?: TestCollectorOptions) => TestCollector;
12
+ export type TestCollectorOptions = Record<string, never>;
13
+ export declare const buildTestCollector: (_stage: ScriptStage, _options?: TestCollectorOptions) => TestCollector;
15
14
  //# sourceMappingURL=tests.d.ts.map