@lovrozagar/oat 0.10.0 → 0.12.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 (278) hide show
  1. package/README.md +25 -2006
  2. package/dist/cli.js +283 -59
  3. package/dist/config/define-config.d.ts +8 -0
  4. package/dist/config/define-config.d.ts.map +1 -1
  5. package/dist/config/define-config.js.map +1 -1
  6. package/dist/config/validate.d.ts +12 -0
  7. package/dist/config/validate.d.ts.map +1 -0
  8. package/dist/config/validate.js +86 -0
  9. package/dist/config/validate.js.map +1 -0
  10. package/dist/conformance/effects.d.ts +9 -0
  11. package/dist/conformance/effects.d.ts.map +1 -0
  12. package/dist/conformance/effects.js +276 -0
  13. package/dist/conformance/effects.js.map +1 -0
  14. package/dist/conformance/expected-failures.d.ts +18 -0
  15. package/dist/conformance/expected-failures.d.ts.map +1 -0
  16. package/dist/conformance/expected-failures.js +48 -0
  17. package/dist/conformance/expected-failures.js.map +1 -0
  18. package/dist/conformance/feature-gate.d.ts +7 -0
  19. package/dist/conformance/feature-gate.d.ts.map +1 -0
  20. package/dist/conformance/feature-gate.js +428 -0
  21. package/dist/conformance/feature-gate.js.map +1 -0
  22. package/dist/conformance/fuzz.d.ts +108 -0
  23. package/dist/conformance/fuzz.d.ts.map +1 -0
  24. package/dist/conformance/fuzz.js +246 -0
  25. package/dist/conformance/fuzz.js.map +1 -0
  26. package/dist/conformance/leaks.d.ts +10 -0
  27. package/dist/conformance/leaks.d.ts.map +1 -0
  28. package/dist/conformance/leaks.js +23 -0
  29. package/dist/conformance/leaks.js.map +1 -0
  30. package/dist/conformance/pool.d.ts +49 -0
  31. package/dist/conformance/pool.d.ts.map +1 -0
  32. package/dist/conformance/pool.js +75 -0
  33. package/dist/conformance/pool.js.map +1 -0
  34. package/dist/conformance/rate-limit.d.ts +7 -0
  35. package/dist/conformance/rate-limit.d.ts.map +1 -0
  36. package/dist/conformance/rate-limit.js +372 -0
  37. package/dist/conformance/rate-limit.js.map +1 -0
  38. package/dist/conformance/scope.d.ts +15 -0
  39. package/dist/conformance/scope.d.ts.map +1 -0
  40. package/dist/conformance/scope.js +78 -0
  41. package/dist/conformance/scope.js.map +1 -0
  42. package/dist/conformance/seed-contract.d.ts +11 -0
  43. package/dist/conformance/seed-contract.d.ts.map +1 -0
  44. package/dist/conformance/seed-contract.js +680 -0
  45. package/dist/conformance/seed-contract.js.map +1 -0
  46. package/dist/conformance/shapes.d.ts +35 -0
  47. package/dist/conformance/shapes.d.ts.map +1 -0
  48. package/dist/conformance/shapes.js +162 -0
  49. package/dist/conformance/shapes.js.map +1 -0
  50. package/dist/conformance/specs.d.ts +21 -0
  51. package/dist/conformance/specs.d.ts.map +1 -0
  52. package/dist/conformance/specs.js +306 -0
  53. package/dist/conformance/specs.js.map +1 -0
  54. package/dist/conformance/suite.d.ts +209 -0
  55. package/dist/conformance/suite.d.ts.map +1 -0
  56. package/dist/conformance/suite.js +1538 -0
  57. package/dist/conformance/suite.js.map +1 -0
  58. package/dist/conformance/unique.d.ts +7 -0
  59. package/dist/conformance/unique.d.ts.map +1 -0
  60. package/dist/conformance/unique.js +586 -0
  61. package/dist/conformance/unique.js.map +1 -0
  62. package/dist/conformance/worker.d.ts +3 -0
  63. package/dist/conformance/worker.d.ts.map +1 -0
  64. package/dist/conformance/worker.js +27 -0
  65. package/dist/conformance/worker.js.map +1 -0
  66. package/dist/index.d.ts +8 -3
  67. package/dist/index.js +5 -2
  68. package/dist/reference/defects.d.ts +71 -1
  69. package/dist/reference/defects.d.ts.map +1 -1
  70. package/dist/reference/defects.js +74 -8
  71. package/dist/reference/defects.js.map +1 -1
  72. package/dist/reference/dialect.d.ts +6 -4
  73. package/dist/reference/dialect.d.ts.map +1 -1
  74. package/dist/reference/dialect.js +1 -0
  75. package/dist/reference/dialect.js.map +1 -1
  76. package/dist/reference/http.d.ts +17 -25
  77. package/dist/reference/http.d.ts.map +1 -1
  78. package/dist/reference/http.js +574 -224
  79. package/dist/reference/http.js.map +1 -1
  80. package/dist/reference/listing.d.ts +51 -0
  81. package/dist/reference/listing.d.ts.map +1 -0
  82. package/dist/reference/listing.js +256 -0
  83. package/dist/reference/listing.js.map +1 -0
  84. package/dist/reference/model.d.ts +35 -1
  85. package/dist/reference/model.d.ts.map +1 -1
  86. package/dist/reference/model.js +42 -0
  87. package/dist/reference/model.js.map +1 -1
  88. package/dist/reference/query.d.ts +132 -43
  89. package/dist/reference/query.d.ts.map +1 -1
  90. package/dist/reference/query.js +397 -315
  91. package/dist/reference/query.js.map +1 -1
  92. package/dist/reference/shapes.d.ts +60 -0
  93. package/dist/reference/shapes.d.ts.map +1 -0
  94. package/dist/reference/shapes.js +142 -0
  95. package/dist/reference/shapes.js.map +1 -0
  96. package/dist/reference/spec.d.ts +9 -2
  97. package/dist/reference/spec.d.ts.map +1 -1
  98. package/dist/reference/spec.js +291 -71
  99. package/dist/reference/spec.js.map +1 -1
  100. package/dist/reference/store-api.d.ts +14 -43
  101. package/dist/reference/store-api.d.ts.map +1 -1
  102. package/dist/reference/store-api.js +8 -58
  103. package/dist/reference/store-api.js.map +1 -1
  104. package/dist/reference/stores/memory.d.ts +12 -15
  105. package/dist/reference/stores/memory.d.ts.map +1 -1
  106. package/dist/reference/stores/memory.js +22 -70
  107. package/dist/reference/stores/memory.js.map +1 -1
  108. package/dist/reference/stores/postgres.d.ts +11 -23
  109. package/dist/reference/stores/postgres.d.ts.map +1 -1
  110. package/dist/reference/stores/postgres.js +53 -334
  111. package/dist/reference/stores/postgres.js.map +1 -1
  112. package/dist/reference/stores/sql-compile.d.ts +36 -0
  113. package/dist/reference/stores/sql-compile.d.ts.map +1 -0
  114. package/dist/reference/stores/sql-compile.js +95 -0
  115. package/dist/reference/stores/sql-compile.js.map +1 -0
  116. package/dist/reference/stores/sqlite.d.ts +12 -27
  117. package/dist/reference/stores/sqlite.d.ts.map +1 -1
  118. package/dist/reference/stores/sqlite.js +54 -355
  119. package/dist/reference/stores/sqlite.js.map +1 -1
  120. package/dist/report/console.d.ts.map +1 -1
  121. package/dist/report/console.js +23 -9
  122. package/dist/report/console.js.map +1 -1
  123. package/dist/report/matrix.d.ts +2 -0
  124. package/dist/report/matrix.d.ts.map +1 -1
  125. package/dist/report/matrix.js +63 -10
  126. package/dist/report/matrix.js.map +1 -1
  127. package/dist/report/render.d.ts +10 -1
  128. package/dist/report/render.d.ts.map +1 -1
  129. package/dist/report/render.js +75 -13
  130. package/dist/report/render.js.map +1 -1
  131. package/dist/runtime/async.d.ts +16 -3
  132. package/dist/runtime/async.d.ts.map +1 -1
  133. package/dist/runtime/async.js +24 -19
  134. package/dist/runtime/async.js.map +1 -1
  135. package/dist/runtime/auth.d.ts +8 -9
  136. package/dist/runtime/auth.d.ts.map +1 -1
  137. package/dist/runtime/auth.js +60 -62
  138. package/dist/runtime/auth.js.map +1 -1
  139. package/dist/runtime/body.d.ts +15 -3
  140. package/dist/runtime/body.d.ts.map +1 -1
  141. package/dist/runtime/body.js +61 -12
  142. package/dist/runtime/body.js.map +1 -1
  143. package/dist/runtime/check-costs.d.ts +15 -0
  144. package/dist/runtime/check-costs.d.ts.map +1 -0
  145. package/dist/runtime/check-costs.js +114 -0
  146. package/dist/runtime/check-costs.js.map +1 -0
  147. package/dist/runtime/check-ids.d.ts +15 -0
  148. package/dist/runtime/check-ids.d.ts.map +1 -0
  149. package/dist/runtime/check-ids.js +140 -0
  150. package/dist/runtime/check-ids.js.map +1 -0
  151. package/dist/runtime/checks.d.ts +88 -20
  152. package/dist/runtime/checks.d.ts.map +1 -1
  153. package/dist/runtime/checks.js +3288 -1947
  154. package/dist/runtime/checks.js.map +1 -1
  155. package/dist/runtime/client.d.ts +112 -0
  156. package/dist/runtime/client.d.ts.map +1 -1
  157. package/dist/runtime/client.js +271 -39
  158. package/dist/runtime/client.js.map +1 -1
  159. package/dist/runtime/cookies.d.ts +16 -2
  160. package/dist/runtime/cookies.d.ts.map +1 -1
  161. package/dist/runtime/cookies.js +83 -22
  162. package/dist/runtime/cookies.js.map +1 -1
  163. package/dist/runtime/exchanges.d.ts +4 -5
  164. package/dist/runtime/exchanges.d.ts.map +1 -1
  165. package/dist/runtime/exchanges.js +33 -55
  166. package/dist/runtime/exchanges.js.map +1 -1
  167. package/dist/runtime/exit.d.ts +40 -0
  168. package/dist/runtime/exit.d.ts.map +1 -0
  169. package/dist/runtime/exit.js +48 -0
  170. package/dist/runtime/exit.js.map +1 -0
  171. package/dist/runtime/feature-gate.d.ts +0 -9
  172. package/dist/runtime/feature-gate.d.ts.map +1 -1
  173. package/dist/runtime/feature-gate.js +0 -21
  174. package/dist/runtime/feature-gate.js.map +1 -1
  175. package/dist/runtime/finding.d.ts +49 -8
  176. package/dist/runtime/finding.d.ts.map +1 -1
  177. package/dist/runtime/finding.js +51 -8
  178. package/dist/runtime/finding.js.map +1 -1
  179. package/dist/runtime/fixture.d.ts +35 -28
  180. package/dist/runtime/fixture.d.ts.map +1 -1
  181. package/dist/runtime/fixture.js +92 -731
  182. package/dist/runtime/fixture.js.map +1 -1
  183. package/dist/runtime/generate.d.ts +63 -0
  184. package/dist/runtime/generate.d.ts.map +1 -0
  185. package/dist/runtime/generate.js +635 -0
  186. package/dist/runtime/generate.js.map +1 -0
  187. package/dist/runtime/headers.d.ts +6 -0
  188. package/dist/runtime/headers.d.ts.map +1 -0
  189. package/dist/runtime/headers.js +16 -0
  190. package/dist/runtime/headers.js.map +1 -0
  191. package/dist/runtime/path.d.ts +7 -0
  192. package/dist/runtime/path.d.ts.map +1 -0
  193. package/dist/runtime/path.js +44 -0
  194. package/dist/runtime/path.js.map +1 -0
  195. package/dist/runtime/payloads.d.ts +2 -0
  196. package/dist/runtime/payloads.d.ts.map +1 -1
  197. package/dist/runtime/payloads.js +2 -1
  198. package/dist/runtime/payloads.js.map +1 -1
  199. package/dist/runtime/rate-limit.d.ts +6 -4
  200. package/dist/runtime/rate-limit.d.ts.map +1 -1
  201. package/dist/runtime/rate-limit.js +22 -33
  202. package/dist/runtime/rate-limit.js.map +1 -1
  203. package/dist/runtime/redact.d.ts +24 -0
  204. package/dist/runtime/redact.d.ts.map +1 -0
  205. package/dist/runtime/redact.js +98 -0
  206. package/dist/runtime/redact.js.map +1 -0
  207. package/dist/runtime/run.d.ts +34 -2
  208. package/dist/runtime/run.d.ts.map +1 -1
  209. package/dist/runtime/run.js +374 -138
  210. package/dist/runtime/run.js.map +1 -1
  211. package/dist/runtime/runs.d.ts +5 -0
  212. package/dist/runtime/runs.d.ts.map +1 -1
  213. package/dist/runtime/runs.js +7 -1
  214. package/dist/runtime/runs.js.map +1 -1
  215. package/dist/runtime/teardown.d.ts +17 -4
  216. package/dist/runtime/teardown.d.ts.map +1 -1
  217. package/dist/runtime/teardown.js +49 -16
  218. package/dist/runtime/teardown.js.map +1 -1
  219. package/dist/runtime/transcript.d.ts +34 -2
  220. package/dist/runtime/transcript.d.ts.map +1 -1
  221. package/dist/runtime/transcript.js +119 -24
  222. package/dist/runtime/transcript.js.map +1 -1
  223. package/dist/runtime/unique.d.ts +2 -11
  224. package/dist/runtime/unique.d.ts.map +1 -1
  225. package/dist/runtime/unique.js +27 -53
  226. package/dist/runtime/unique.js.map +1 -1
  227. package/dist/runtime/validate.d.ts +13 -2
  228. package/dist/runtime/validate.d.ts.map +1 -1
  229. package/dist/runtime/validate.js +51 -31
  230. package/dist/runtime/validate.js.map +1 -1
  231. package/dist/runtime/wait.d.ts +2 -1
  232. package/dist/runtime/wait.d.ts.map +1 -1
  233. package/dist/runtime/wait.js +2 -36
  234. package/dist/runtime/wait.js.map +1 -1
  235. package/dist/runtime/world.d.ts +24 -1
  236. package/dist/runtime/world.d.ts.map +1 -1
  237. package/dist/runtime/world.js +101 -26
  238. package/dist/runtime/world.js.map +1 -1
  239. package/dist/spec/collection.d.ts +8 -2
  240. package/dist/spec/collection.d.ts.map +1 -1
  241. package/dist/spec/collection.js +47 -7
  242. package/dist/spec/collection.js.map +1 -1
  243. package/dist/spec/extensions.d.ts +11 -1
  244. package/dist/spec/extensions.d.ts.map +1 -1
  245. package/dist/spec/extensions.js +10 -2
  246. package/dist/spec/extensions.js.map +1 -1
  247. package/dist/spec/graph.d.ts +46 -0
  248. package/dist/spec/graph.d.ts.map +1 -1
  249. package/dist/spec/graph.js +175 -11
  250. package/dist/spec/graph.js.map +1 -1
  251. package/dist/spec/load.d.ts +25 -5
  252. package/dist/spec/load.d.ts.map +1 -1
  253. package/dist/spec/load.js +160 -59
  254. package/dist/spec/load.js.map +1 -1
  255. package/dist/spec/query-capabilities.d.ts +4 -0
  256. package/dist/spec/query-capabilities.d.ts.map +1 -1
  257. package/dist/spec/query-capabilities.js +6 -0
  258. package/dist/spec/query-capabilities.js.map +1 -1
  259. package/dist/spec/schema.d.ts +20 -0
  260. package/dist/spec/schema.d.ts.map +1 -0
  261. package/dist/spec/schema.js +118 -0
  262. package/dist/spec/schema.js.map +1 -0
  263. package/dist/spec/tag-schema.d.ts +12 -0
  264. package/dist/spec/tag-schema.d.ts.map +1 -0
  265. package/dist/spec/tag-schema.js +144 -0
  266. package/dist/spec/tag-schema.js.map +1 -0
  267. package/dist/spec/types.js +17 -1
  268. package/dist/spec/types.js.map +1 -1
  269. package/docs/api.md +59 -0
  270. package/docs/assumptions.md +99 -0
  271. package/docs/checks.md +183 -0
  272. package/docs/commands.md +214 -0
  273. package/docs/configuration.md +650 -0
  274. package/docs/model.md +184 -0
  275. package/docs/reference-defects.md +94 -0
  276. package/docs/reports.md +211 -0
  277. package/docs/tags.md +403 -0
  278. package/package.json +3 -1
package/dist/cli.js CHANGED
@@ -1,61 +1,106 @@
1
1
  #!/usr/bin/env node
2
+ import { EXIT, exitCode } from "./runtime/exit.js";
2
3
  import { createWriteStream, writeFileSync } from "node:fs";
3
4
  import { mkdir, writeFile } from "node:fs/promises";
4
5
  import { dirname, resolve } from "node:path";
5
6
  import { pathToFileURL } from "node:url";
6
7
  import { interpolate, loadConfig } from "./config/load.js";
8
+ import { configProblems } from "./config/validate.js";
7
9
  import { report } from "./report/console.js";
8
10
  import { renderMatrixGraph, renderMatrixHtml } from "./report/matrix.js";
9
11
  import { ISSUE_REPRO_DIR, renderConsole, renderJson, renderMarkdown, renderRepros } from "./report/render.js";
10
12
  import { createProgressPump, createStderrProgress, formatProgressJsonl, formatProgressLine, formatProgressTsv, PROGRESS_GLOSSARY, PROGRESS_TSV_HEADER, } from "./runtime/progress.js";
11
13
  import { resolveSaveExchanges } from "./runtime/exchanges.js";
12
- import { allocateRunDir, DEFAULT_RUNS_ROOT } from "./runtime/runs.js";
14
+ import { allocateRunDir, DEFAULT_RUNS_ROOT, publishLatest } from "./runtime/runs.js";
13
15
  import { authStepOperationIds, planScope, resolveTargetScope, ScopeError } from "./runtime/scope.js";
14
16
  import { renderTeardown } from "./runtime/teardown.js";
15
17
  import { buildModel } from "./spec/graph.js";
16
18
  import { dereference, loadSpec } from "./spec/load.js";
17
- export const KNOWN_FLAGS = new Set([
18
- "help",
19
- "config",
20
- "spec",
21
- "base-url",
22
- "only",
23
- "ops",
24
- "profile",
25
- "seed",
26
- "out",
27
- "keep-fixtures",
28
- "max-in-flight",
29
- "quiet",
30
- "untagged",
31
- "backend",
32
- "dialect",
33
- "fuzz",
34
- "precision",
35
- "max-defects",
36
- "json",
37
- "parser",
38
- "save-exchanges",
39
- "no-save-exchanges",
40
- ]);
19
+ /** Every flag, once: whether it takes a value, and what kind. Parsing and help both read this. */
20
+ export const FLAGS = {
21
+ backend: { kind: "value" },
22
+ "base-url": { kind: "value" },
23
+ config: { kind: "value" },
24
+ defects: { kind: "value" },
25
+ dialect: { kind: "value" },
26
+ fuzz: { kind: "optional-value", number: "positive" },
27
+ "fuzz-seed": { kind: "value", number: "positive" },
28
+ help: { kind: "boolean" },
29
+ jobs: { kind: "value", number: "positive" },
30
+ json: { kind: "boolean" },
31
+ "keep-fixtures": { kind: "boolean" },
32
+ "max-defects": { kind: "value", number: "positive" },
33
+ "max-in-flight": { kind: "value", number: "positive" },
34
+ "no-save-exchanges": { kind: "boolean" },
35
+ only: { kind: "value" },
36
+ ops: { kind: "value" },
37
+ out: { kind: "value" },
38
+ parser: { kind: "boolean" },
39
+ precision: { kind: "optional-value", number: "positive" },
40
+ profile: { kind: "value" },
41
+ quiet: { kind: "boolean" },
42
+ "save-exchanges": { kind: "boolean" },
43
+ seed: { kind: "value", number: "integer" },
44
+ "skip-backend": { kind: "value" },
45
+ spec: { kind: "value" },
46
+ untagged: { kind: "boolean" },
47
+ };
48
+ export const KNOWN_FLAGS = new Set(Object.keys(FLAGS));
49
+ /**
50
+ * `oat <command> [--flag value | --flag=value | --switch] …`. A value flag must have its value;
51
+ * a switch takes none; a numeric value must be one. The first problem is returned as `error`
52
+ * rather than guessed around: `--max-in-flight -1` once hung a run, `--seed abc` seeded strings
53
+ * with `NaN`, and a flag followed by another flag silently became `true`.
54
+ */
41
55
  export function parseArgs(argv) {
42
- const [command = "help", ...rest] = argv;
56
+ const leadingFlag = argv[0]?.startsWith("--") === true;
57
+ const command = leadingFlag ? "help" : (argv[0] ?? "help");
58
+ const rest = leadingFlag ? argv : argv.slice(1);
43
59
  const flags = {};
60
+ let error;
61
+ const fail = (message) => {
62
+ error ??= message;
63
+ };
44
64
  for (let i = 0; i < rest.length; i++) {
45
65
  const token = rest[i];
46
66
  if (token === undefined || !token.startsWith("--"))
47
67
  continue;
48
- const key = token.slice(2);
68
+ const equals = token.indexOf("=");
69
+ const key = equals === -1 ? token.slice(2) : token.slice(2, equals);
70
+ const inline = equals === -1 ? undefined : token.slice(equals + 1);
71
+ const spec = FLAGS[key];
49
72
  const next = rest[i + 1];
50
- if (next !== undefined && !next.startsWith("--")) {
51
- flags[key] = next;
73
+ const nextIsValue = next !== undefined && !next.startsWith("--");
74
+ let value;
75
+ if (spec === undefined || spec.kind === "boolean") {
76
+ if (inline !== undefined && spec !== undefined)
77
+ fail(`--${key} takes no value`);
78
+ value = inline ?? true;
79
+ }
80
+ else if (inline !== undefined) {
81
+ value = inline;
82
+ }
83
+ else if (nextIsValue) {
84
+ value = next;
52
85
  i++;
53
86
  }
87
+ else if (spec.kind === "optional-value") {
88
+ value = true;
89
+ }
54
90
  else {
55
- flags[key] = true;
91
+ fail(`--${key} needs a value`);
92
+ value = true;
56
93
  }
94
+ if (spec?.number !== undefined && typeof value === "string") {
95
+ const parsed = Number(value);
96
+ const integer = value.trim() !== "" && Number.isSafeInteger(parsed);
97
+ if (!integer || (spec.number === "positive" && parsed < 1)) {
98
+ fail(`--${key} must be ${spec.number === "positive" ? "a positive" : "an"} integer, got "${value}"`);
99
+ }
100
+ }
101
+ flags[key] = value;
57
102
  }
58
- return { command, flags };
103
+ return error === undefined ? { command, flags } : { command, error, flags };
59
104
  }
60
105
  export function unknownFlag(flags) {
61
106
  for (const key of Object.keys(flags)) {
@@ -94,6 +139,9 @@ Flags
94
139
  --precision [n] vary cohort data against a correct backend; any finding is a false positive
95
140
  --max-defects most defects per combination (default: 4)
96
141
  --seed fuzz seed, so a failing combination replays exactly
142
+ --fuzz-seed seed for the combination smoke pass of a full conformance run (default: 1)
143
+ --jobs conformance legs run at once, each on its own thread (default: CPUs − 1, at most 4)
144
+ --skip-backend comma-separated backends a full conformance run may leave out when unreachable
97
145
  --json machine-readable output, for plan and doctor
98
146
  `;
99
147
  function str(flags, key) {
@@ -107,19 +155,28 @@ function list(flags, key) {
107
155
  .filter(Boolean);
108
156
  }
109
157
  /**
110
- * Exit code for a finished run. Root causes fail it, not raw findings: gaps and blocked entries
111
- * are information. A targeted run also fails unless every target held — under `--ops` a target
112
- * nothing graded must not read as a pass.
158
+ * A config file, loaded, checked and interpolated — or the first reason it cannot be used. Every
159
+ * one of these is the caller's to fix, so the command exits 2 with nothing sent.
113
160
  */
114
- export function exitCode(result) {
115
- if (result.network?.incomplete === true)
116
- return 1;
117
- if (result.findings.some((f) => f.verdict !== "COVERAGE_GAP" && f.verdict !== "BLOCKED"))
118
- return 1;
119
- if (result.scope.mode === "targeted" && result.scope.operations.some((op) => op.status !== "held"))
120
- return 1;
121
- return 0;
161
+ async function readConfig(path, forRun) {
162
+ let loaded;
163
+ try {
164
+ loaded = await loadConfig(path);
165
+ }
166
+ catch (error) {
167
+ return { problem: (error instanceof Error ? error.message : String(error)).replace(/^oat: /, "") };
168
+ }
169
+ const problems = configProblems(loaded, { forRun });
170
+ if (problems.length > 0)
171
+ return { problem: `${path} is not a valid config:\n ${problems.join("\n ")}` };
172
+ try {
173
+ return { config: interpolate(loaded) };
174
+ }
175
+ catch (error) {
176
+ return { problem: (error instanceof Error ? error.message : String(error)).replace(/^oat: /, "") };
177
+ }
122
178
  }
179
+ export { EXIT, exitCode } from "./runtime/exit.js";
123
180
  async function commandRun(flags) {
124
181
  const configPath = str(flags, "config");
125
182
  if (configPath === undefined) {
@@ -127,7 +184,12 @@ async function commandRun(flags) {
127
184
  return 2;
128
185
  }
129
186
  const { run } = await import("./runtime/run.js");
130
- const config = interpolate(await loadConfig(configPath));
187
+ const read = await readConfig(configPath, true);
188
+ if ("problem" in read) {
189
+ process.stderr.write(`oat: ${read.problem}\n`);
190
+ return EXIT.usage;
191
+ }
192
+ const config = read.config;
131
193
  const baseUrl = str(flags, "base-url") ?? config.baseUrl;
132
194
  const seedFlag = str(flags, "seed");
133
195
  const only = list(flags, "only") ?? config.only?.filter((name) => name.trim() !== "");
@@ -176,9 +238,23 @@ async function commandRun(flags) {
176
238
  stderrProgress?.emit(snap);
177
239
  fileProgress.emit(snap);
178
240
  };
241
+ /* Ctrl-C stops testing, not the run: what oat created is still removed and the partial report
242
+ * is still written. A second signal means "now", and exits without either. */
243
+ const stop = new AbortController();
244
+ const onSignal = (signal) => {
245
+ if (stop.signal.aborted) {
246
+ process.stderr.write(`\noat: ${signal} again — exiting without teardown\n`);
247
+ process.exit(130);
248
+ }
249
+ process.stderr.write(`\noat: ${signal} — stopping, removing what this run created (again to exit now)\n`);
250
+ stop.abort();
251
+ };
252
+ process.on("SIGINT", onSignal);
253
+ process.on("SIGTERM", onSignal);
179
254
  let result;
180
255
  try {
181
256
  result = await run({
257
+ signal: stop.signal,
182
258
  baseUrl,
183
259
  principals,
184
260
  spec: config.spec,
@@ -195,6 +271,7 @@ async function commandRun(flags) {
195
271
  ...(config.rateLimits === undefined ? {} : { rateLimits: config.rateLimits }),
196
272
  ...(config.origins === undefined ? {} : { origins: config.origins }),
197
273
  ...(config.outOfBand === undefined ? {} : { outOfBand: config.outOfBand }),
274
+ ...(config.payloads === undefined ? {} : { payloads: config.payloads }),
198
275
  ...(config.query === undefined ? {} : { query: config.query }),
199
276
  ...(config.entities === undefined ? {} : { entities: config.entities }),
200
277
  keepFixtures: flags["keep-fixtures"] === true || config.keepFixtures === true,
@@ -212,6 +289,8 @@ async function commandRun(flags) {
212
289
  return 2;
213
290
  }
214
291
  finally {
292
+ process.off("SIGINT", onSignal);
293
+ process.off("SIGTERM", onSignal);
215
294
  stderrProgress?.stop();
216
295
  fileProgress.stop();
217
296
  progressLog.end();
@@ -221,6 +300,9 @@ async function commandRun(flags) {
221
300
  const durationMs = performance.now() - began;
222
301
  const input = {
223
302
  baseUrl,
303
+ checkNotes: result.checkNotes,
304
+ checkTimings: result.checkTimings,
305
+ checksOutOfScope: result.checksOutOfScope,
224
306
  checksRun: result.checksRun,
225
307
  checksSkipped: result.checksSkipped,
226
308
  checksSuppressed: result.checksSuppressed,
@@ -264,22 +346,53 @@ async function commandRun(flags) {
264
346
  if (result.network?.incomplete === true) {
265
347
  process.stdout.write(` network: ${result.network.kind} — run incomplete\n`);
266
348
  }
349
+ await publishLatest(allocated);
267
350
  process.stdout.write(` latest: ${allocated.latest}\n\n`);
268
351
  return exitCode(result);
269
352
  }
270
353
  export async function main() {
271
- const { command, flags } = parseArgs(process.argv.slice(2));
354
+ const { command, error: flagError, flags } = parseArgs(process.argv.slice(2));
272
355
  const unknown = unknownFlag(flags);
273
356
  if (unknown !== undefined) {
274
357
  process.stderr.write(`oat: unknown flag "--${unknown}"\n\n${USAGE}`);
275
358
  return 2;
276
359
  }
360
+ if (flagError !== undefined) {
361
+ process.stderr.write(`oat: ${flagError}\n\n${USAGE}`);
362
+ return EXIT.usage;
363
+ }
277
364
  if (command === "help" || flags.help === true) {
278
365
  process.stdout.write(USAGE);
279
366
  return 0;
280
367
  }
281
368
  if (command === "conformance") {
282
- const { postgresAvailable, renderParserSuite, renderSuite, runExampleSpecSuite, runTagUnlockSuite, runParserSuite, runPayloadCatalogSuite, runCoverageReportSuite, runSeedContractSuite, runEffectsSuite, runTenantScopeSuite, runSuite, sqliteAvailable, d1Available, } = await import("./conformance/suite.js");
369
+ const { defectsFor, passAnswer, postgresAvailable, renderParserSuite, renderUnproven, runExampleSpecSuite, runTagUnlockSuite, runParserSuite, runPayloadCatalogSuite, runCoverageReportSuite, runSeedContractSuite, runEffectsSuite, runTenantScopeSuite, sqliteAvailable, d1Available, } = await import("./conformance/suite.js");
370
+ /* A typo in a selector must stop the run, not widen it: an unknown backend once ran every
371
+ * backend, and an unknown dialect silently filtered out the defects it could not express. */
372
+ const { DIALECTS } = await import("./reference/dialect.js");
373
+ const { isDefectName } = await import("./reference/defects.js");
374
+ const backendFlag = str(flags, "backend");
375
+ const backendNames = ["memory", "sqlite", "postgres", "d1"];
376
+ if (backendFlag !== undefined && !backendNames.includes(backendFlag)) {
377
+ process.stderr.write(`oat: unknown --backend "${backendFlag}" — expected ${backendNames.join(", ")}\n`);
378
+ return 2;
379
+ }
380
+ const dialectFlag = str(flags, "dialect");
381
+ if (dialectFlag !== undefined && !Object.hasOwn(DIALECTS, dialectFlag)) {
382
+ process.stderr.write(`oat: unknown --dialect "${dialectFlag}" — expected ${Object.keys(DIALECTS).join(", ")}\n`);
383
+ return 2;
384
+ }
385
+ const onlyFlag = str(flags, "only")?.split(",").filter(Boolean);
386
+ const unknownDefects = (onlyFlag ?? []).filter((name) => !isDefectName(name));
387
+ if (flags.only === true || (onlyFlag !== undefined && onlyFlag.length === 0)) {
388
+ process.stderr.write("oat: --only needs a comma-separated list of defect names\n");
389
+ return 2;
390
+ }
391
+ if (unknownDefects.length > 0) {
392
+ process.stderr.write(`oat: --only names no defect: ${unknownDefects.join(", ")}\n`);
393
+ return 2;
394
+ }
395
+ const { createPool, defaultJobs } = await import("./conformance/pool.js");
283
396
  const { runFeatureGateSuite } = await import("./conformance/feature-gate.js");
284
397
  const { runRateLimitSuite } = await import("./conformance/rate-limit.js");
285
398
  const { runUniqueSuite } = await import("./conformance/unique.js");
@@ -291,9 +404,14 @@ export async function main() {
291
404
  const example = renderParserSuite(await runExampleSpecSuite());
292
405
  process.stdout.write(example.text);
293
406
  parser.failures += example.failures;
294
- const unlocks = renderParserSuite(await runTagUnlockSuite());
295
- process.stdout.write(unlocks.text);
296
- parser.failures += unlocks.failures;
407
+ /* The defect matrix makes the two runs the tag-unlock claims are judged from; only a run
408
+ * that stops before the matrix makes them here. */
409
+ const beforeMatrix = flags.parser === true || flags.precision !== undefined || flags.fuzz !== undefined;
410
+ if (beforeMatrix) {
411
+ const unlocks = renderParserSuite(await runTagUnlockSuite());
412
+ process.stdout.write(unlocks.text);
413
+ parser.failures += unlocks.failures;
414
+ }
297
415
  const coverage = renderParserSuite(runCoverageReportSuite());
298
416
  process.stdout.write(coverage.text);
299
417
  parser.failures += coverage.failures;
@@ -385,18 +503,110 @@ export async function main() {
385
503
  ]
386
504
  : backends.map((backend) => ({ backend, dialect: dialect ?? "postgrest" }));
387
505
  let failures = parser.failures;
388
- for (const pass of passes) {
389
- process.stdout.write(`\n ── ${pass.backend} · ${pass.dialect} ${"─".repeat(46)}\n`);
390
- const result = renderSuite(await runSuite(only, pass.backend, pass.dialect), pass.dialect);
391
- process.stdout.write(result.text);
392
- failures += result.failures;
506
+ const proven = new Set();
507
+ const jobsFlag = str(flags, "jobs");
508
+ const jobs = jobsFlag === undefined ? defaultJobs() : Number.parseInt(jobsFlag, 10);
509
+ if (!Number.isSafeInteger(jobs) || jobs < 1) {
510
+ process.stderr.write("oat: --jobs must be a positive integer\n");
511
+ return 2;
512
+ }
513
+ /* Every leg is queued at once and printed in order as its turn comes. */
514
+ const pool = createPool(jobs);
515
+ const withShapes = requested === undefined || requested === "memory";
516
+ /* A leg goes out as its baselines and its defects in chunks, so a long leg spreads across
517
+ * the pool; its results come back in order and are rendered here. */
518
+ const LEG_CHUNK = 6;
519
+ const passAnswers = passes.map(async (pass) => {
520
+ const defects = defectsFor(pass.backend, pass.dialect, only);
521
+ const chunks = Array.from({ length: Math.ceil(defects.length / LEG_CHUNK) }, (_, index) => defects.slice(index * LEG_CHUNK, (index + 1) * LEG_CHUNK));
522
+ const answers = await Promise.all([
523
+ pool.run({ backend: pass.backend, dialect: pass.dialect, kind: "baselines" }),
524
+ ...chunks.map((chunk) => pool.run({ backend: pass.backend, dialect: pass.dialect, defects: chunk, kind: "defects" })),
525
+ ]);
526
+ const results = answers.flatMap((answer) => (answer.kind === "leg" ? answer.results : []));
527
+ return { kind: "pass", ...passAnswer(results, pass.backend, pass.dialect) };
528
+ });
529
+ const shapeAnswer = withShapes ? pool.run({ kind: "shapes" }) : undefined;
530
+ /* `--ops` recall needs each defect's full run, which the default pass has just made; only
531
+ * the targeted half is sent, spread across the pool. */
532
+ const fullRun = only === undefined && requested === undefined && dialect === undefined;
533
+ const defaultPass = passes.findIndex((pass) => pass.backend === "memory" && pass.dialect === "postgrest");
534
+ const scopeAnswers = !fullRun || defaultPass === -1
535
+ ? undefined
536
+ : passAnswers[defaultPass]?.then(async (answer) => {
537
+ const { DEFECTS } = await import("./reference/defects.js");
538
+ const names = Object.keys(DEFECTS);
539
+ const known = answer.kind === "pass" ? answer.primaryOps : {};
540
+ const chunks = Array.from({ length: jobs }, (_, lane) => names.filter((_name, index) => index % jobs === lane)).filter((chunk) => chunk.length > 0);
541
+ return Promise.all(chunks.map((defects) => pool.run({ defects, kind: "scope", known })));
542
+ });
543
+ const recallAnswers = shapeAnswer === undefined || only !== undefined
544
+ ? undefined
545
+ : shapeAnswer.then((answer) => Promise.all((answer.kind === "cases" ? answer.cases : []).map((shape) => pool.run({ kind: "recall", shapes: [shape] }))));
546
+ try {
547
+ for (const [index, pass] of passes.entries()) {
548
+ process.stdout.write(`\n ── ${pass.backend} · ${pass.dialect} ${"─".repeat(46)}\n`);
549
+ const result = await passAnswers[index];
550
+ if (result?.kind !== "pass")
551
+ continue;
552
+ process.stdout.write(result.text);
553
+ failures += result.failures;
554
+ for (const id of result.proven)
555
+ proven.add(id);
556
+ }
557
+ /* Only a complete run can say a check was never proven; a filtered one never tried. */
558
+ if (fullRun) {
559
+ const unproven = renderUnproven(proven);
560
+ process.stdout.write(unproven.text);
561
+ failures += unproven.failures;
562
+ }
563
+ const defaultAnswer = defaultPass === -1 ? undefined : await passAnswers[defaultPass];
564
+ const unlocks = renderParserSuite(await runTagUnlockSuite(defaultAnswer?.kind === "pass" ? defaultAnswer.baselines : undefined));
565
+ process.stdout.write(unlocks.text);
566
+ failures += unlocks.failures;
567
+ if (scopeAnswers !== undefined) {
568
+ const scopeResults = (await scopeAnswers).flatMap((answer) => (answer.kind === "results" ? answer.results : []));
569
+ const scope = renderParserSuite(scopeResults);
570
+ process.stdout.write(scope.text);
571
+ failures += scope.failures;
572
+ }
573
+ /* The opposite question to the defect matrix: whether oat stays quiet on a correct backend
574
+ * shaped unlike the one it was written against. One engine is enough — a shape varies the
575
+ * API, not the storage. */
576
+ if (shapeAnswer !== undefined) {
577
+ const { renderShapeSuite } = await import("./conformance/shapes.js");
578
+ process.stdout.write(`\n ── shapes · memory ${"─".repeat(46)}\n`);
579
+ const shapeCases = await shapeAnswer;
580
+ const shapes = renderShapeSuite(shapeCases.kind === "cases" ? shapeCases.cases : []);
581
+ process.stdout.write(shapes.text);
582
+ failures += shapes.failures;
583
+ if (recallAnswers !== undefined) {
584
+ process.stdout.write(`\n ── recall behind shapes · memory ${"─".repeat(32)}\n`);
585
+ const recallCases = (await recallAnswers).flatMap((answer) => (answer.kind === "cases" ? answer.cases : []));
586
+ const recall = renderShapeSuite(recallCases, true);
587
+ process.stdout.write(recall.text);
588
+ failures += recall.failures;
589
+ }
590
+ }
591
+ }
592
+ finally {
593
+ await pool.close();
393
594
  }
394
595
  if (requested === undefined && skipped.length > 0) {
596
+ /* An engine that is not there is not a pass: the SQL-only defects and every engine
597
+ * difference go untested. Leaving one out has to be asked for by name. */
598
+ const allowed = new Set(str(flags, "skip-backend")?.split(",") ?? []);
395
599
  for (const backend of skipped) {
396
600
  const why = backend === "sqlite"
397
601
  ? "node:sqlite unavailable (Node 22 needs --experimental-sqlite)"
398
602
  : "no Postgres server reachable on the default connection";
399
- process.stdout.write(` note: ${backend} backend skipped — ${why}\n`);
603
+ if (allowed.has(backend)) {
604
+ process.stdout.write(` note: ${backend} backend skipped as asked — ${why}\n`);
605
+ }
606
+ else {
607
+ failures += 1;
608
+ process.stdout.write(` ✗ ${backend} backend unavailable — ${why}. Start it, or pass --skip-backend ${backend}\n`);
609
+ }
400
610
  }
401
611
  process.stdout.write("\n");
402
612
  }
@@ -407,7 +617,15 @@ export async function main() {
407
617
  * probe writing into a constrained field — was invisible to the one-at-a-time matrix. */
408
618
  const { renderFuzz, runFuzz } = await import("./conformance/fuzz.js");
409
619
  process.stdout.write(`\n ── combinations ${"─".repeat(46)}\n`);
410
- const smoke = renderFuzz(await runFuzz({ backend: "memory", cases: 40, maxDefects: 6, seed: 1 }));
620
+ /* A fixed seed tests the same 40 combinations forever. CI passes a fresh one per run and
621
+ * the seed is printed, so any failure it finds replays exactly. */
622
+ const fuzzSeed = Number.parseInt(str(flags, "fuzz-seed") ?? "1", 10);
623
+ if (!Number.isSafeInteger(fuzzSeed) || fuzzSeed < 1) {
624
+ process.stderr.write("oat: --fuzz-seed must be a positive integer\n");
625
+ return 2;
626
+ }
627
+ process.stdout.write(` fuzz seed ${fuzzSeed} — replay with --fuzz 40 --max-defects 6 --seed ${fuzzSeed}\n`);
628
+ const smoke = renderFuzz(await runFuzz({ backend: "memory", cases: 40, maxDefects: 6, seed: fuzzSeed }));
411
629
  process.stdout.write(smoke.text);
412
630
  failures += smoke.failures;
413
631
  }
@@ -460,13 +678,19 @@ export async function main() {
460
678
  return commandRun(flags);
461
679
  const specFlag = str(flags, "spec");
462
680
  const configPath = str(flags, "config");
463
- const loaded = configPath === undefined ? undefined : await loadConfig(configPath);
681
+ const read = configPath === undefined ? undefined : await readConfig(configPath, false);
682
+ if (read !== undefined && "problem" in read) {
683
+ process.stderr.write(`oat: ${read.problem}\n`);
684
+ return EXIT.usage;
685
+ }
686
+ const loaded = read?.config;
464
687
  const specSource = specFlag ?? loaded?.spec;
465
688
  if (specSource === undefined) {
466
689
  process.stderr.write("oat: --spec (or --config) is required\n\n" + USAGE);
467
690
  return 2;
468
691
  }
469
- const raw = await loadSpec(specSource, str(flags, "base-url"));
692
+ /* A relative spec resolves against the config's base URL, as it does for `run`. */
693
+ const raw = await loadSpec(specSource, str(flags, "base-url") ?? loaded?.baseUrl);
470
694
  const { doc, externalRefs } = dereference(raw);
471
695
  const model = buildModel(doc);
472
696
  try {
@@ -500,7 +724,7 @@ export async function main() {
500
724
  return 0;
501
725
  }
502
726
  case "doctor": {
503
- const config = configPath === undefined ? undefined : interpolate(await loadConfig(configPath));
727
+ const config = loaded;
504
728
  const output = report.doctor(model, externalRefs, flags.json === true, config === undefined
505
729
  ? undefined
506
730
  : {
@@ -521,7 +745,7 @@ export function start() {
521
745
  process.exitCode = code;
522
746
  }, (error) => {
523
747
  process.stderr.write(`oat: ${error instanceof Error ? error.message : String(error)}\n`);
524
- process.exitCode = 1;
748
+ process.exitCode = EXIT.failed;
525
749
  });
526
750
  }
527
751
  /* `node dist/cli.js …` is the test/CI entry. `bin/oat.js` calls start() itself because
@@ -361,6 +361,8 @@ export interface RateLimitSpec {
361
361
  */
362
362
  category?: string;
363
363
  }
364
+ /** How much of the string payload catalog a run sends. */
365
+ export type PayloadPolicy = "full" | "per-write-path";
364
366
  export interface OatConfig {
365
367
  /** OpenAPI document — an http(s) URL or a filesystem path. JSON or YAML. */
366
368
  spec: string;
@@ -387,6 +389,12 @@ export interface OatConfig {
387
389
  * Defaults: `{ attempts: 6, initialMs: 200, maxMs: 3000 }` (~9s worst case).
388
390
  */
389
391
  outOfBand?: OutOfBandConfig;
392
+ /**
393
+ * How much of the 159-case string payload catalog to send. `"per-write-path"` (the default)
394
+ * sends all of it once per distinct write path — request media type and field type — and a
395
+ * representative family of each kind elsewhere; `"full"` sends all of it to every field.
396
+ */
397
+ payloads?: PayloadPolicy;
390
398
  /** Path parameters oat cannot create. Also declarable in-spec via `x-root`. */
391
399
  roots?: Record<string, string>;
392
400
  /** Fixture generation derives from this, so a failing run is exactly reproducible. */
@@ -1 +1 @@
1
- {"version":3,"file":"define-config.d.ts","sourceRoot":"","sources":["../../src/config/define-config.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAA;AAEvF,YAAY,EACX,SAAS,EACT,QAAQ,EACR,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,aAAa,GACb,MAAM,+BAA+B,CAAA;AAItC,UAAU,QAAQ;IACjB;;;;;;;;;;OAUG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B;;;;;;OAMG;IACH,cAAc,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAA;IAChE,8EAA8E;IAC9E,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC7B,8CAA8C;IAC9C,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;CACjB;AAED,2FAA2F;AAC3F,MAAM,WAAW,aAAc,SAAQ,QAAQ;IAC9C,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC9B,kEAAkE;IAClE,MAAM,CAAC,EAAE,MAAM,CAAA;CACf;AAED,sEAAsE;AACtE,MAAM,WAAW,WAAY,SAAQ,QAAQ;IAC5C,MAAM,EAAE,MAAM,CAAA;IACd;;;;OAIG;IACH,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC9B,6FAA6F;IAC7F,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;;;;OAIG;IACH,QAAQ,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAA;CAC9B;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,aAAa;IAC7B,SAAS,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAA;CACxD;AAED,MAAM,MAAM,QAAQ,GAAG,aAAa,GAAG,WAAW,GAAG,aAAa,CAAA;AAIlE,sEAAsE;AACtE,MAAM,WAAW,WAAW;IAC3B,uEAAuE;IACvE,KAAK,EAAE,CAAC,QAAQ,EAAE,GAAG,QAAQ,EAAE,CAAC,CAAA;CAChC;AAED,MAAM,WAAW,QAAQ;IACxB,+EAA+E;IAC/E,KAAK,EAAE,CAAC,QAAQ,EAAE,GAAG,QAAQ,EAAE,CAAC,CAAA;IAChC,4EAA4E;IAC5E,cAAc,EAAE,MAAM,CAAA;IACtB,+FAA+F;IAC/F,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,qEAAqE;IACrE,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,yCAAyC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,gFAAgF;IAChF,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB;;;;OAIG;IACH,OAAO,CAAC,EAAE,WAAW,CAAA;CACrB;AAED;;;GAGG;AACH,MAAM,WAAW,QAAQ;IACxB,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,eAAe,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,QAAQ,CAAA;AAE/C,wBAAgB,UAAU,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,IAAI,QAAQ,CAEhE;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,IAAI,QAAQ,CAEhE;AAED,MAAM,WAAW,mBAAmB;IACnC,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,SAAS;IACzB,EAAE,EAAE,MAAM,CAAA;IACV,+FAA+F;IAC/F,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC,4FAA4F;IAC5F,IAAI,CAAC,EAAE,aAAa,CAAA;IACpB,wDAAwD;IACxD,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC9B;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACtC;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IACb;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IACb;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;CACjB;AAID,MAAM,WAAW,gBAAgB;IAChC,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,uFAAuF;IACvF,OAAO,EAAE,MAAM,CAAA;IACf,qEAAqE;IACrE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC7B,wFAAwF;IACxF,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAC/B;AAED,MAAM,WAAW,wBAAwB;IACxC,4EAA4E;IAC5E,UAAU,EAAE,MAAM,CAAA;IAClB,mFAAmF;IACnF,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAC/B;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,eAAe;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,aAAa;IAC7B,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,MAAM,CAAA;IACX,WAAW,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,YAAY;IAC5B,WAAW,EAAE,MAAM,CAAA;IACnB,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAA;IACb,2DAA2D;IAC3D,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,OAAO,CAAA;CACf;AAED,MAAM,WAAW,iBAAiB;IACjC,2DAA2D;IAC3D,WAAW,EAAE,MAAM,CAAA;IACnB,2EAA2E;IAC3E,MAAM,EAAE,OAAO,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,aAAa;IAC7B,WAAW,EAAE,MAAM,CAAA;IACnB,8DAA8D;IAC9D,SAAS,EAAE,MAAM,CAAA;IACjB,sBAAsB;IACtB,KAAK,EAAE,MAAM,CAAA;IACb,oDAAoD;IACpD,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,sBAAsB;IACtB,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,0DAA0D;IAC1D,OAAO,CAAC,EAAE;QACT,IAAI,EAAE,MAAM,CAAA;QACZ,QAAQ,EAAE,MAAM,CAAA;QAChB,KAAK,EAAE,MAAM,CAAA;QACb,KAAK,EAAE,MAAM,CAAA;KACb,CAAA;CACD;AAED,MAAM,WAAW,UAAU;IAC1B,KAAK,EAAE,UAAU,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;CACjB;AAED;;;;;GAKG;AACH,MAAM,MAAM,gBAAgB,GAAG,UAAU,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC,CAAA;CAAE,GAAG,IAAI,CAAA;AAElG,MAAM,WAAW,OAAO;IACvB;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;IACf;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;IAC/B,4DAA4D;IAC5D,OAAO,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,KAAK;IACrB,qFAAqF;IACrF,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;IACxE;;;;;;OAMG;IACH,iBAAiB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,wBAAwB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACrF;;;;;OAKG;IACH,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAA;IACrE;;;;OAIG;IACH,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,CAAA;IACnF;;;OAGG;IACH,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAA;IACjE;;;OAGG;IACH,oBAAoB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAAA;IAChF;;;OAGG;IACH,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAAA;IACtE;;;;;;OAMG;IACH,wBAAwB,CAAC,EAAE,CAC1B,OAAO,EAAE,wBAAwB,KAC7B,OAAO,CAAC,eAAe,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAC,CAAA;CACnE;AAED,MAAM,WAAW,wBAAwB;IACxC,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC7B,GAAG,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;CAC9E;AAED,6FAA6F;AAC7F,MAAM,WAAW,YAAY;IAC5B,KAAK,CAAC,EAAE,iBAAiB,CAAA;CACzB;AAED,wFAAwF;AACxF,MAAM,WAAW,UAAU;IAC1B,EAAE,EAAE,MAAM,CAAA;IACV,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;CACZ;AAID;;;;;;;GAOG;AACH,MAAM,WAAW,WAAW;IAC3B,0EAA0E;IAC1E,OAAO,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAA;IACnC,gEAAgE;IAChE,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,gGAAgG;IAChG,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;CAClB;AAID;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC7B;;;;;OAKG;IACH,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,MAAM,CAAA;IACX;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;CACjB;AAID,MAAM,WAAW,SAAS;IACzB,4EAA4E;IAC5E,IAAI,EAAE,MAAM,CAAA;IACZ,0BAA0B;IAC1B,OAAO,EAAE,MAAM,CAAA;IACf;;;OAGG;IACH,UAAU,EAAE,CAAC,SAAS,EAAE,GAAG,SAAS,EAAE,CAAC,CAAA;IACvC,KAAK,CAAC,EAAE,KAAK,CAAA;IACb,gFAAgF;IAChF,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,oHAAoH;IACpH,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACtC;;;;OAIG;IACH,OAAO,CAAC,EAAE,UAAU,EAAE,CAAA;IACtB;;;OAGG;IACH,SAAS,CAAC,EAAE,eAAe,CAAA;IAC3B,+EAA+E;IAC/E,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC9B,sFAAsF;IACtF,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,oFAAoF;IACpF,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,0FAA0F;IAC1F,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,0FAA0F;IAC1F,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;IACf;;;;OAIG;IACH,GAAG,CAAC,EAAE,MAAM,EAAE,CAAA;IACd;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;IACtC,2FAA2F;IAC3F,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB;;;;OAIG;IACH,UAAU,CAAC,EAAE,aAAa,EAAE,CAAA;IAC5B;;;OAGG;IACH,KAAK,CAAC,EAAE,iBAAiB,CAAA;IACzB,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;IACvC,mEAAmE;IACnE,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;;;;OAIG;IACH,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB;;;OAGG;IACH,OAAO,CAAC,EAAE;QACT,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB,mFAAmF;QACnF,MAAM,CAAC,EAAE,MAAM,CAAA;QACf;;;WAGG;QACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;KACzB,CAAA;CACD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,CAEzD"}
1
+ {"version":3,"file":"define-config.d.ts","sourceRoot":"","sources":["../../src/config/define-config.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"define-config.js","sourceRoot":"","sources":["../../src/config/define-config.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAwIH,MAAM,UAAU,UAAU,CAAC,IAAmB;IAC7C,OAAO,UAAU,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,CAAC,OAAO,IAAI,IAAI,CAAC,CAAA;AACrF,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAmB;IAC7C,OAAO,OAAO,IAAI,IAAI,CAAA;AACvB,CAAC;AAkWD;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,YAAY,CAAC,MAAiB;IAC7C,OAAO,MAAM,CAAA;AACd,CAAC"}
1
+ {"version":3,"file":"define-config.js","sourceRoot":"","sources":["../../src/config/define-config.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAwIH,MAAM,UAAU,UAAU,CAAC,IAAmB;IAC7C,OAAO,UAAU,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,CAAC,OAAO,IAAI,IAAI,CAAC,CAAA;AACrF,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAmB;IAC7C,OAAO,OAAO,IAAI,IAAI,CAAA;AACvB,CAAC;AA2WD;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,YAAY,CAAC,MAAiB;IAC7C,OAAO,MAAM,CAAA;AACd,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * The config, checked before anything runs.
3
+ *
4
+ * A misspelled key used to be ignored and a wrong type used to flow into the run — a
5
+ * `maxInFlight` of `"8"` silently became the default, a `cohortSize` of `0` seeded nothing. Each
6
+ * problem names the key path and what it should be, and the CLI exits 2 without sending a request.
7
+ */
8
+ /** Every problem with `config`, by key path. `run` needs a spec, a base URL and a principal. */
9
+ export declare function configProblems(config: unknown, options?: {
10
+ forRun?: boolean;
11
+ }): string[];
12
+ //# sourceMappingURL=validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/config/validate.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAwFH,gGAAgG;AAChG,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,MAAM,EAAE,CAO5F"}