@lovrozagar/oat 0.9.1 → 0.11.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 (283) hide show
  1. package/README.md +26 -1936
  2. package/dist/cli.js +326 -60
  3. package/dist/config/define-config.d.ts +15 -1
  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 +10 -3
  67. package/dist/index.js +6 -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 +2 -1
  121. package/dist/report/console.d.ts.map +1 -1
  122. package/dist/report/console.js +56 -10
  123. package/dist/report/console.js.map +1 -1
  124. package/dist/report/matrix.d.ts +10 -13
  125. package/dist/report/matrix.d.ts.map +1 -1
  126. package/dist/report/matrix.js +82 -18
  127. package/dist/report/matrix.js.map +1 -1
  128. package/dist/report/render.d.ts +18 -1
  129. package/dist/report/render.d.ts.map +1 -1
  130. package/dist/report/render.js +169 -14
  131. package/dist/report/render.js.map +1 -1
  132. package/dist/runtime/async.d.ts +16 -3
  133. package/dist/runtime/async.d.ts.map +1 -1
  134. package/dist/runtime/async.js +24 -19
  135. package/dist/runtime/async.js.map +1 -1
  136. package/dist/runtime/auth.d.ts +2 -9
  137. package/dist/runtime/auth.d.ts.map +1 -1
  138. package/dist/runtime/auth.js +38 -62
  139. package/dist/runtime/auth.js.map +1 -1
  140. package/dist/runtime/body.d.ts +15 -3
  141. package/dist/runtime/body.d.ts.map +1 -1
  142. package/dist/runtime/body.js +61 -12
  143. package/dist/runtime/body.js.map +1 -1
  144. package/dist/runtime/check-costs.d.ts +15 -0
  145. package/dist/runtime/check-costs.d.ts.map +1 -0
  146. package/dist/runtime/check-costs.js +114 -0
  147. package/dist/runtime/check-costs.js.map +1 -0
  148. package/dist/runtime/check-ids.d.ts +15 -0
  149. package/dist/runtime/check-ids.d.ts.map +1 -0
  150. package/dist/runtime/check-ids.js +140 -0
  151. package/dist/runtime/check-ids.js.map +1 -0
  152. package/dist/runtime/checks.d.ts +122 -18
  153. package/dist/runtime/checks.d.ts.map +1 -1
  154. package/dist/runtime/checks.js +3437 -1933
  155. package/dist/runtime/checks.js.map +1 -1
  156. package/dist/runtime/client.d.ts +112 -0
  157. package/dist/runtime/client.d.ts.map +1 -1
  158. package/dist/runtime/client.js +271 -39
  159. package/dist/runtime/client.js.map +1 -1
  160. package/dist/runtime/cookies.d.ts +16 -2
  161. package/dist/runtime/cookies.d.ts.map +1 -1
  162. package/dist/runtime/cookies.js +83 -22
  163. package/dist/runtime/cookies.js.map +1 -1
  164. package/dist/runtime/exchanges.d.ts +4 -5
  165. package/dist/runtime/exchanges.d.ts.map +1 -1
  166. package/dist/runtime/exchanges.js +33 -55
  167. package/dist/runtime/exchanges.js.map +1 -1
  168. package/dist/runtime/exit.d.ts +40 -0
  169. package/dist/runtime/exit.d.ts.map +1 -0
  170. package/dist/runtime/exit.js +48 -0
  171. package/dist/runtime/exit.js.map +1 -0
  172. package/dist/runtime/feature-gate.d.ts +0 -9
  173. package/dist/runtime/feature-gate.d.ts.map +1 -1
  174. package/dist/runtime/feature-gate.js +0 -21
  175. package/dist/runtime/feature-gate.js.map +1 -1
  176. package/dist/runtime/finding.d.ts +61 -7
  177. package/dist/runtime/finding.d.ts.map +1 -1
  178. package/dist/runtime/finding.js +74 -12
  179. package/dist/runtime/finding.js.map +1 -1
  180. package/dist/runtime/fixture.d.ts +35 -28
  181. package/dist/runtime/fixture.d.ts.map +1 -1
  182. package/dist/runtime/fixture.js +92 -731
  183. package/dist/runtime/fixture.js.map +1 -1
  184. package/dist/runtime/generate.d.ts +63 -0
  185. package/dist/runtime/generate.d.ts.map +1 -0
  186. package/dist/runtime/generate.js +635 -0
  187. package/dist/runtime/generate.js.map +1 -0
  188. package/dist/runtime/headers.d.ts +6 -0
  189. package/dist/runtime/headers.d.ts.map +1 -0
  190. package/dist/runtime/headers.js +16 -0
  191. package/dist/runtime/headers.js.map +1 -0
  192. package/dist/runtime/path.d.ts +7 -0
  193. package/dist/runtime/path.d.ts.map +1 -0
  194. package/dist/runtime/path.js +44 -0
  195. package/dist/runtime/path.js.map +1 -0
  196. package/dist/runtime/payloads.d.ts +2 -0
  197. package/dist/runtime/payloads.d.ts.map +1 -1
  198. package/dist/runtime/payloads.js +2 -1
  199. package/dist/runtime/payloads.js.map +1 -1
  200. package/dist/runtime/rate-limit.d.ts +6 -4
  201. package/dist/runtime/rate-limit.d.ts.map +1 -1
  202. package/dist/runtime/rate-limit.js +22 -33
  203. package/dist/runtime/rate-limit.js.map +1 -1
  204. package/dist/runtime/redact.d.ts +24 -0
  205. package/dist/runtime/redact.d.ts.map +1 -0
  206. package/dist/runtime/redact.js +98 -0
  207. package/dist/runtime/redact.js.map +1 -0
  208. package/dist/runtime/run.d.ts +51 -2
  209. package/dist/runtime/run.d.ts.map +1 -1
  210. package/dist/runtime/run.js +463 -195
  211. package/dist/runtime/run.js.map +1 -1
  212. package/dist/runtime/runs.d.ts +5 -0
  213. package/dist/runtime/runs.d.ts.map +1 -1
  214. package/dist/runtime/runs.js +7 -1
  215. package/dist/runtime/runs.js.map +1 -1
  216. package/dist/runtime/scope.d.ts +163 -0
  217. package/dist/runtime/scope.d.ts.map +1 -0
  218. package/dist/runtime/scope.js +423 -0
  219. package/dist/runtime/scope.js.map +1 -0
  220. package/dist/runtime/teardown.d.ts +17 -4
  221. package/dist/runtime/teardown.d.ts.map +1 -1
  222. package/dist/runtime/teardown.js +49 -16
  223. package/dist/runtime/teardown.js.map +1 -1
  224. package/dist/runtime/transcript.d.ts +34 -2
  225. package/dist/runtime/transcript.d.ts.map +1 -1
  226. package/dist/runtime/transcript.js +119 -24
  227. package/dist/runtime/transcript.js.map +1 -1
  228. package/dist/runtime/unique.d.ts +2 -11
  229. package/dist/runtime/unique.d.ts.map +1 -1
  230. package/dist/runtime/unique.js +27 -53
  231. package/dist/runtime/unique.js.map +1 -1
  232. package/dist/runtime/validate.d.ts +13 -2
  233. package/dist/runtime/validate.d.ts.map +1 -1
  234. package/dist/runtime/validate.js +51 -31
  235. package/dist/runtime/validate.js.map +1 -1
  236. package/dist/runtime/wait.d.ts +2 -1
  237. package/dist/runtime/wait.d.ts.map +1 -1
  238. package/dist/runtime/wait.js +2 -36
  239. package/dist/runtime/wait.js.map +1 -1
  240. package/dist/runtime/world.d.ts +31 -3
  241. package/dist/runtime/world.d.ts.map +1 -1
  242. package/dist/runtime/world.js +113 -32
  243. package/dist/runtime/world.js.map +1 -1
  244. package/dist/spec/collection.d.ts +8 -2
  245. package/dist/spec/collection.d.ts.map +1 -1
  246. package/dist/spec/collection.js +47 -7
  247. package/dist/spec/collection.js.map +1 -1
  248. package/dist/spec/extensions.d.ts +5 -1
  249. package/dist/spec/extensions.d.ts.map +1 -1
  250. package/dist/spec/extensions.js +9 -2
  251. package/dist/spec/extensions.js.map +1 -1
  252. package/dist/spec/graph.d.ts +46 -0
  253. package/dist/spec/graph.d.ts.map +1 -1
  254. package/dist/spec/graph.js +175 -11
  255. package/dist/spec/graph.js.map +1 -1
  256. package/dist/spec/load.d.ts +25 -5
  257. package/dist/spec/load.d.ts.map +1 -1
  258. package/dist/spec/load.js +160 -59
  259. package/dist/spec/load.js.map +1 -1
  260. package/dist/spec/query-capabilities.d.ts +4 -0
  261. package/dist/spec/query-capabilities.d.ts.map +1 -1
  262. package/dist/spec/query-capabilities.js +6 -0
  263. package/dist/spec/query-capabilities.js.map +1 -1
  264. package/dist/spec/schema.d.ts +20 -0
  265. package/dist/spec/schema.d.ts.map +1 -0
  266. package/dist/spec/schema.js +118 -0
  267. package/dist/spec/schema.js.map +1 -0
  268. package/dist/spec/tag-schema.d.ts +12 -0
  269. package/dist/spec/tag-schema.d.ts.map +1 -0
  270. package/dist/spec/tag-schema.js +143 -0
  271. package/dist/spec/tag-schema.js.map +1 -0
  272. package/dist/spec/types.js +17 -1
  273. package/dist/spec/types.js.map +1 -1
  274. package/docs/api.md +59 -0
  275. package/docs/assumptions.md +99 -0
  276. package/docs/checks.md +183 -0
  277. package/docs/commands.md +214 -0
  278. package/docs/configuration.md +650 -0
  279. package/docs/model.md +184 -0
  280. package/docs/reference-defects.md +94 -0
  281. package/docs/reports.md +211 -0
  282. package/docs/tags.md +400 -0
  283. package/package.json +3 -1
package/dist/cli.js CHANGED
@@ -1,59 +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";
15
+ import { authStepOperationIds, planScope, resolveTargetScope, ScopeError } from "./runtime/scope.js";
13
16
  import { renderTeardown } from "./runtime/teardown.js";
14
17
  import { buildModel } from "./spec/graph.js";
15
18
  import { dereference, loadSpec } from "./spec/load.js";
16
- export const KNOWN_FLAGS = new Set([
17
- "help",
18
- "config",
19
- "spec",
20
- "base-url",
21
- "only",
22
- "profile",
23
- "seed",
24
- "out",
25
- "keep-fixtures",
26
- "max-in-flight",
27
- "quiet",
28
- "untagged",
29
- "backend",
30
- "dialect",
31
- "fuzz",
32
- "precision",
33
- "max-defects",
34
- "json",
35
- "parser",
36
- "save-exchanges",
37
- "no-save-exchanges",
38
- ]);
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
+ */
39
55
  export function parseArgs(argv) {
40
- 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);
41
59
  const flags = {};
60
+ let error;
61
+ const fail = (message) => {
62
+ error ??= message;
63
+ };
42
64
  for (let i = 0; i < rest.length; i++) {
43
65
  const token = rest[i];
44
66
  if (token === undefined || !token.startsWith("--"))
45
67
  continue;
46
- 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];
47
72
  const next = rest[i + 1];
48
- if (next !== undefined && !next.startsWith("--")) {
49
- 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;
50
85
  i++;
51
86
  }
87
+ else if (spec.kind === "optional-value") {
88
+ value = true;
89
+ }
52
90
  else {
53
- flags[key] = true;
91
+ fail(`--${key} needs a value`);
92
+ value = true;
54
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;
55
102
  }
56
- return { command, flags };
103
+ return error === undefined ? { command, flags } : { command, error, flags };
57
104
  }
58
105
  export function unknownFlag(flags) {
59
106
  for (const key of Object.keys(flags)) {
@@ -74,7 +121,8 @@ Flags
74
121
  --config oat config module (.ts/.js/.mjs/.json) with a default export
75
122
  --spec OpenAPI document, http(s) URL or filesystem path
76
123
  --base-url backend under test, overriding the config
77
- --only comma-separated entity names to restrict the run to
124
+ --ops comma-separated operationIds to grade (row.*, cdn:asset.get); the rest is support
125
+ --only comma-separated entity names; each grades every operation it owns
78
126
  --profile named profile gating which operations run (built-in: full, cheap)
79
127
  --seed integer seed for fixture generation (default 1)
80
128
  --out history root; each run is <out>/<datetime>/ (default ./.oat/runs)
@@ -91,12 +139,44 @@ Flags
91
139
  --precision [n] vary cohort data against a correct backend; any finding is a false positive
92
140
  --max-defects most defects per combination (default: 4)
93
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
94
145
  --json machine-readable output, for plan and doctor
95
146
  `;
96
147
  function str(flags, key) {
97
148
  const value = flags[key];
98
149
  return typeof value === "string" ? value : undefined;
99
150
  }
151
+ function list(flags, key) {
152
+ return str(flags, key)
153
+ ?.split(",")
154
+ .map((s) => s.trim())
155
+ .filter(Boolean);
156
+ }
157
+ /**
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.
160
+ */
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
+ }
178
+ }
179
+ export { EXIT, exitCode } from "./runtime/exit.js";
100
180
  async function commandRun(flags) {
101
181
  const configPath = str(flags, "config");
102
182
  if (configPath === undefined) {
@@ -104,14 +184,16 @@ async function commandRun(flags) {
104
184
  return 2;
105
185
  }
106
186
  const { run } = await import("./runtime/run.js");
107
- 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;
108
193
  const baseUrl = str(flags, "base-url") ?? config.baseUrl;
109
194
  const seedFlag = str(flags, "seed");
110
- const onlyFromFlag = str(flags, "only")
111
- ?.split(",")
112
- .map((s) => s.trim())
113
- .filter(Boolean);
114
- const only = onlyFromFlag ?? config.only?.filter((name) => name.trim() !== "");
195
+ const only = list(flags, "only") ?? config.only?.filter((name) => name.trim() !== "");
196
+ const ops = list(flags, "ops") ?? config.ops?.filter((name) => name.trim() !== "");
115
197
  const profile = str(flags, "profile") ?? config.profile;
116
198
  const saveExchanges = resolveSaveExchanges({
117
199
  ...(flags["no-save-exchanges"] === true ? { flag: false } : flags["save-exchanges"] === true ? { flag: true } : {}),
@@ -156,9 +238,23 @@ async function commandRun(flags) {
156
238
  stderrProgress?.emit(snap);
157
239
  fileProgress.emit(snap);
158
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);
159
254
  let result;
160
255
  try {
161
256
  result = await run({
257
+ signal: stop.signal,
162
258
  baseUrl,
163
259
  principals,
164
260
  spec: config.spec,
@@ -169,11 +265,13 @@ async function commandRun(flags) {
169
265
  ...(config.roots === undefined ? {} : { roots: config.roots }),
170
266
  ...(config.cohortSize === undefined ? {} : { cohortSize: config.cohortSize }),
171
267
  ...(only === undefined || only.length === 0 ? {} : { only }),
268
+ ...(ops === undefined || ops.length === 0 ? {} : { ops }),
172
269
  ...(profile === undefined ? {} : { profile }),
173
270
  ...(config.profiles === undefined ? {} : { profiles: config.profiles }),
174
271
  ...(config.rateLimits === undefined ? {} : { rateLimits: config.rateLimits }),
175
272
  ...(config.origins === undefined ? {} : { origins: config.origins }),
176
273
  ...(config.outOfBand === undefined ? {} : { outOfBand: config.outOfBand }),
274
+ ...(config.payloads === undefined ? {} : { payloads: config.payloads }),
177
275
  ...(config.query === undefined ? {} : { query: config.query }),
178
276
  ...(config.entities === undefined ? {} : { entities: config.entities }),
179
277
  keepFixtures: flags["keep-fixtures"] === true || config.keepFixtures === true,
@@ -184,7 +282,15 @@ async function commandRun(flags) {
184
282
  ...(config.network === undefined ? {} : { network: config.network }),
185
283
  });
186
284
  }
285
+ catch (error) {
286
+ if (!(error instanceof ScopeError))
287
+ throw error;
288
+ process.stderr.write(`${error.message}\n`);
289
+ return 2;
290
+ }
187
291
  finally {
292
+ process.off("SIGINT", onSignal);
293
+ process.off("SIGTERM", onSignal);
188
294
  stderrProgress?.stop();
189
295
  fileProgress.stop();
190
296
  progressLog.end();
@@ -194,6 +300,9 @@ async function commandRun(flags) {
194
300
  const durationMs = performance.now() - began;
195
301
  const input = {
196
302
  baseUrl,
303
+ checkNotes: result.checkNotes,
304
+ checkTimings: result.checkTimings,
305
+ checksOutOfScope: result.checksOutOfScope,
197
306
  checksRun: result.checksRun,
198
307
  checksSkipped: result.checksSkipped,
199
308
  checksSuppressed: result.checksSuppressed,
@@ -205,6 +314,7 @@ async function commandRun(flags) {
205
314
  model: result.model,
206
315
  profile: result.profile,
207
316
  profileExclusions: result.profileExclusions,
317
+ scope: result.scope,
208
318
  startedAt,
209
319
  ...(result.exchanges === undefined ? {} : { exchanges: result.exchanges }),
210
320
  ...(result.network === undefined ? {} : { network: result.network }),
@@ -236,26 +346,53 @@ async function commandRun(flags) {
236
346
  if (result.network?.incomplete === true) {
237
347
  process.stdout.write(` network: ${result.network.kind} — run incomplete\n`);
238
348
  }
349
+ await publishLatest(allocated);
239
350
  process.stdout.write(` latest: ${allocated.latest}\n\n`);
240
- /* Exit code counts root causes, not raw findings: gaps and blocked entries are information,
241
- * not failures, and a CI gate should react to defects only. */
242
- if (result.network?.incomplete === true)
243
- return 1;
244
- return result.findings.filter((f) => f.verdict !== "COVERAGE_GAP" && f.verdict !== "BLOCKED").length > 0 ? 1 : 0;
351
+ return exitCode(result);
245
352
  }
246
353
  export async function main() {
247
- const { command, flags } = parseArgs(process.argv.slice(2));
354
+ const { command, error: flagError, flags } = parseArgs(process.argv.slice(2));
248
355
  const unknown = unknownFlag(flags);
249
356
  if (unknown !== undefined) {
250
357
  process.stderr.write(`oat: unknown flag "--${unknown}"\n\n${USAGE}`);
251
358
  return 2;
252
359
  }
360
+ if (flagError !== undefined) {
361
+ process.stderr.write(`oat: ${flagError}\n\n${USAGE}`);
362
+ return EXIT.usage;
363
+ }
253
364
  if (command === "help" || flags.help === true) {
254
365
  process.stdout.write(USAGE);
255
366
  return 0;
256
367
  }
257
368
  if (command === "conformance") {
258
- 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");
259
396
  const { runFeatureGateSuite } = await import("./conformance/feature-gate.js");
260
397
  const { runRateLimitSuite } = await import("./conformance/rate-limit.js");
261
398
  const { runUniqueSuite } = await import("./conformance/unique.js");
@@ -267,9 +404,14 @@ export async function main() {
267
404
  const example = renderParserSuite(await runExampleSpecSuite());
268
405
  process.stdout.write(example.text);
269
406
  parser.failures += example.failures;
270
- const unlocks = renderParserSuite(await runTagUnlockSuite());
271
- process.stdout.write(unlocks.text);
272
- 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
+ }
273
415
  const coverage = renderParserSuite(runCoverageReportSuite());
274
416
  process.stdout.write(coverage.text);
275
417
  parser.failures += coverage.failures;
@@ -361,18 +503,110 @@ export async function main() {
361
503
  ]
362
504
  : backends.map((backend) => ({ backend, dialect: dialect ?? "postgrest" }));
363
505
  let failures = parser.failures;
364
- for (const pass of passes) {
365
- process.stdout.write(`\n ── ${pass.backend} · ${pass.dialect} ${"─".repeat(46)}\n`);
366
- const result = renderSuite(await runSuite(only, pass.backend, pass.dialect), pass.dialect);
367
- process.stdout.write(result.text);
368
- 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();
369
594
  }
370
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(",") ?? []);
371
599
  for (const backend of skipped) {
372
600
  const why = backend === "sqlite"
373
601
  ? "node:sqlite unavailable (Node 22 needs --experimental-sqlite)"
374
602
  : "no Postgres server reachable on the default connection";
375
- 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
+ }
376
610
  }
377
611
  process.stdout.write("\n");
378
612
  }
@@ -383,7 +617,15 @@ export async function main() {
383
617
  * probe writing into a constrained field — was invisible to the one-at-a-time matrix. */
384
618
  const { renderFuzz, runFuzz } = await import("./conformance/fuzz.js");
385
619
  process.stdout.write(`\n ── combinations ${"─".repeat(46)}\n`);
386
- 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 }));
387
629
  process.stdout.write(smoke.text);
388
630
  failures += smoke.failures;
389
631
  }
@@ -436,12 +678,19 @@ export async function main() {
436
678
  return commandRun(flags);
437
679
  const specFlag = str(flags, "spec");
438
680
  const configPath = str(flags, "config");
439
- const specSource = specFlag ?? (configPath === undefined ? undefined : (await loadConfig(configPath)).spec);
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;
687
+ const specSource = specFlag ?? loaded?.spec;
440
688
  if (specSource === undefined) {
441
689
  process.stderr.write("oat: --spec (or --config) is required\n\n" + USAGE);
442
690
  return 2;
443
691
  }
444
- 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);
445
694
  const { doc, externalRefs } = dereference(raw);
446
695
  const model = buildModel(doc);
447
696
  try {
@@ -454,11 +703,28 @@ export async function main() {
454
703
  throw error;
455
704
  }
456
705
  switch (command) {
457
- case "plan":
458
- process.stdout.write(report.plan(model, flags.json === true));
706
+ case "plan": {
707
+ const ops = list(flags, "ops") ?? loaded?.ops;
708
+ const only = list(flags, "only") ?? loaded?.only;
709
+ let scope;
710
+ try {
711
+ scope = planScope(model, resolveTargetScope(model, {
712
+ ...(ops === undefined ? {} : { ops }),
713
+ ...(only === undefined ? {} : { only }),
714
+ authCreates: authStepOperationIds(loaded?.principals ?? []),
715
+ }));
716
+ }
717
+ catch (error) {
718
+ if (!(error instanceof ScopeError))
719
+ throw error;
720
+ process.stderr.write(`${error.message}\n`);
721
+ return 2;
722
+ }
723
+ process.stdout.write(report.plan(model, flags.json === true, scope.mode === "targeted" ? scope : undefined));
459
724
  return 0;
725
+ }
460
726
  case "doctor": {
461
- const config = configPath === undefined ? undefined : interpolate(await loadConfig(configPath));
727
+ const config = loaded;
462
728
  const output = report.doctor(model, externalRefs, flags.json === true, config === undefined
463
729
  ? undefined
464
730
  : {
@@ -479,7 +745,7 @@ export function start() {
479
745
  process.exitCode = code;
480
746
  }, (error) => {
481
747
  process.stderr.write(`oat: ${error instanceof Error ? error.message : String(error)}\n`);
482
- process.exitCode = 1;
748
+ process.exitCode = EXIT.failed;
483
749
  });
484
750
  }
485
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. */
@@ -395,8 +403,14 @@ export interface OatConfig {
395
403
  cohortSize?: number;
396
404
  /** Requests allowed in flight at once. Past a server's comfort this makes runs slower. */
397
405
  maxInFlight?: number;
398
- /** Restrict the run to these entity names. */
406
+ /** Grade every operation these entities own, and nothing else. Joins `ops` as a union. */
399
407
  only?: string[];
408
+ /**
409
+ * Grade only these operationIds; every other operation is support — called to reach or observe
410
+ * a target, never graded. `*` globs within an id (`row.*`); `<originId>:<operationId>` targets a
411
+ * secondary origin. `--ops` on the CLI replaces this list.
412
+ */
413
+ ops?: string[];
400
414
  /**
401
415
  * Named profiles this run can select between, keyed by name. `"full"` and `"cheap"` exist
402
416
  * implicitly and need no entry here; add one only for a profile a cost band can't express.
@@ -1 +1 @@
1
- {"version":3,"file":"define-config.d.ts","sourceRoot":"","sources":["../../src/config/define-config.ts"],"names":[],"mappings":"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"}
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,0DAA0D;AAC1D,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,gBAAgB,CAAA;AAErD,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;;;;OAIG;IACH,QAAQ,CAAC,EAAE,aAAa,CAAA;IACxB,+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 +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;AA4VD;;;;;;;;;;;;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"}