@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
@@ -1 +1 @@
1
- {"version":3,"file":"feature-gate.d.ts","sourceRoot":"","sources":["../../src/runtime/feature-gate.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACtD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAEpD,8FAA8F;AAC9F,eAAO,MAAM,mBAAmB,MAAM,CAAA;AAEtC,wBAAgB,6BAA6B,CAC5C,EAAE,EAAE,IAAI,CAAC,cAAc,EAAE,aAAa,CAAC,EACvC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,OAAO,GACX,OAAO,CAYT;AAED,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,IAAI,CAAC,cAAc,EAAE,aAAa,CAAC,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM,CAQlG;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAK7E;AAED;;;GAGG;AACH,wBAAgB,4BAA4B,CAC3C,QAAQ,EAAE,gBAAgB,EAC1B,SAAS,EAAE,eAAe,EAC1B,EAAE,EAAE,cAAc,EAClB,GAAG,EAAE,eAAe,GAAG,SAAS,EAChC,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,MAAM,GACZ,IAAI,CAwBN"}
1
+ {"version":3,"file":"feature-gate.d.ts","sourceRoot":"","sources":["../../src/runtime/feature-gate.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEtD,8FAA8F;AAC9F,eAAO,MAAM,mBAAmB,MAAM,CAAA;AAEtC,wBAAgB,6BAA6B,CAC5C,EAAE,EAAE,IAAI,CAAC,cAAc,EAAE,aAAa,CAAC,EACvC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,OAAO,GACX,OAAO,CAYT;AAED,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,IAAI,CAAC,cAAc,EAAE,aAAa,CAAC,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM,CAQlG;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAK7E"}
@@ -44,25 +44,4 @@ export function featureGateVars(body) {
44
44
  return null;
45
45
  return vars;
46
46
  }
47
- /**
48
- * A gate 403 still has to match the documented error schema. Coverage is "this 403 is
49
- * expected"; it is not a free pass for an undeclared body.
50
- */
51
- export function reportFeatureGateSchemaDrift(findings, validator, op, raw, exchange, entity) {
52
- if (raw === undefined)
53
- return;
54
- if (!validator.documents(raw, exchange.status))
55
- return;
56
- const result = validator.validate(op.operationId, raw, exchange.status, exchange.responseBody);
57
- if (result.ok)
58
- return;
59
- if (findings.findings.some((finding) => finding.check === "schema.error-response-matches-document" &&
60
- finding.entity === entity &&
61
- finding.evidence.some((prior) => prior.seq === exchange.seq))) {
62
- return;
63
- }
64
- findings.spec("schema.error-response-matches-document", entity, `${exchange.status} error body does not match its documented schema`, `${op.operationId} returned ${exchange.status} with a body that fails the schema the ` +
65
- `document declares for it: ${result.errors.join("; ")}. Clients that parse errors ` +
66
- "from the spec will not understand this response.", [exchange]);
67
- }
68
47
  //# sourceMappingURL=feature-gate.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"feature-gate.js","sourceRoot":"","sources":["../../src/runtime/feature-gate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"feature-gate.js","sourceRoot":"","sources":["../../src/runtime/feature-gate.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,8FAA8F;AAC9F,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,CAAA;AAEtC,MAAM,UAAU,6BAA6B,CAC5C,EAAuC,EACvC,MAAc,EACd,IAAa;IAEb,IAAI,EAAE,CAAC,WAAW,KAAK,IAAI;QAAE,OAAO,KAAK,CAAA;IACzC,IAAI,MAAM,KAAK,mBAAmB;QAAE,OAAO,KAAK,CAAA;IAChD,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IAC3D,MAAM,IAAI,GAAI,IAAgC,CAAC,IAAI,CAAA;IACnD,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IAC3D,MAAM,GAAG,GAAG,IAA+B,CAAA;IAC3C,IAAI,GAAG,CAAC,IAAI,KAAK,cAAc;QAAE,OAAO,KAAK,CAAA;IAC7C;kFAC8E;IAC9E,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,IAAI,GAAG,CAAC,OAAO,KAAK,EAAE,CAAC,WAAW;QAAE,OAAO,KAAK,CAAA;IACnF,OAAO,IAAI,CAAA;AACZ,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,EAAuC,EAAE,IAAa;IACzF,MAAM,GAAG,GAAG,EAAE,CAAC,WAAW,IAAI,SAAS,CAAA;IACvC,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC,CAAA;IAClC,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,mBAAmB,GAAG,EAAE,CAAA;IAClD,MAAM,MAAM,GAAG,CAAC,cAAc,EAAE,eAAe,EAAE,SAAS,CAAC;SACzD,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,QAAQ,CAAC;SAChD,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACzC,OAAO,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,mBAAmB,GAAG,EAAE,CAAC,CAAC,CAAC,mBAAmB,GAAG,KAAK,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAA;AACxG,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAa;IAC5C,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAA;IAC1D,MAAM,IAAI,GAAI,IAAgC,CAAC,IAAI,CAAA;IACnD,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAA;IAC1D,OAAO,IAA+B,CAAA;AACvC,CAAC"}
@@ -17,7 +17,44 @@ export interface Finding {
17
17
  origin?: string;
18
18
  /** Fixture filename when `uploads.each` drove the invocation. */
19
19
  fixture?: string;
20
+ /** Operations this finding judges. Absent on run-level findings (teardown, network, pacing). */
21
+ operations?: string[];
20
22
  }
23
+ /**
24
+ * Whether a finding is a root cause — what fails a run. Coverage gaps and blocks are what oat
25
+ * could not look at, not what it found. The console, the reports, the matrix and the exit code
26
+ * all ask this one question.
27
+ */
28
+ export declare function isRootCause(finding: {
29
+ verdict: Verdict | string;
30
+ }): boolean;
31
+ /**
32
+ * How one run of a check ended. `run` returns one on every path, so a check cannot fall silent:
33
+ * it either asserted the property, reported a finding, could not reach a verdict, or stood down
34
+ * because what it tests is not there — and the last two say why.
35
+ */
36
+ export type Outcome = {
37
+ kind: "asserted";
38
+ note?: string;
39
+ } | {
40
+ kind: "finding";
41
+ verdict: Verdict;
42
+ } | {
43
+ kind: "unresolved";
44
+ reason: string;
45
+ } | {
46
+ kind: "stood-down";
47
+ reason: string;
48
+ };
49
+ /** The property was tested and held — or, if the check reported along the way, did not. */
50
+ export declare const ASSERTED: Outcome;
51
+ /**
52
+ * The property held, and how the backend behaved is worth saying — a policy the document leaves
53
+ * open, such as whether unknown query parameters are rejected or ignored.
54
+ */
55
+ export declare function asserted(note: string): Outcome;
56
+ /** The check does not apply here after all: what it tests is absent, for `reason`. */
57
+ export declare function standDown(reason: string): Outcome;
21
58
  /**
22
59
  * A check that ran, could not reach a verdict, and stopped.
23
60
  *
@@ -32,22 +69,39 @@ export interface Inconclusive {
32
69
  entity: string;
33
70
  /** Why no verdict was reachable, in the reader's terms. */
34
71
  reason: string;
72
+ operations?: string[];
35
73
  }
36
74
  export declare class FindingCollector {
75
+ #private;
37
76
  readonly findings: Finding[];
38
77
  readonly inconclusive: Inconclusive[];
78
+ constructor(findings?: Finding[], inconclusive?: Inconclusive[], operations?: readonly string[], owner?: string);
79
+ /**
80
+ * A view that accepts findings only under `check`. Each check runs against one, so a check
81
+ * cannot report under another's id: a finding filed under the wrong id is proven by the wrong
82
+ * defect, and suppresses the wrong dependents.
83
+ */
84
+ ownedBy(check: string): FindingCollector;
85
+ /**
86
+ * A view over the same findings that attributes everything it records to `operations`.
87
+ *
88
+ * Each check runs against its own view, so a finding lands on the operations the check judges
89
+ * without threading an id through every call site. Read-only checks run concurrently, so a
90
+ * shared "current check" would attribute one check's finding to another.
91
+ */
92
+ attributed(operations: readonly string[]): FindingCollector;
39
93
  /**
40
94
  * Records that a check ran without reaching a verdict. Returns `undefined` so a check can
41
95
  * `return ctx.findings.unresolved(...)` at the point it gives up, which keeps the reason
42
96
  * beside the condition that caused it rather than in a comment.
43
97
  */
44
- unresolved(check: string, entity: string, reason: string): undefined;
45
- report(finding: Finding): void;
46
- backend(check: string, entity: string, summary: string, detail: string, evidence: Exchange[], fixture?: string): void;
47
- security(check: string, entity: string, summary: string, detail: string, evidence: Exchange[], fixture?: string): void;
48
- spec(check: string, entity: string, summary: string, detail: string, evidence: Exchange[], fixture?: string): void;
49
- gap(check: string, entity: string, summary: string, detail: string, fixture?: string): void;
50
- blocked(check: string, entity: string, summary: string, cause: string): void;
98
+ unresolved(check: string, entity: string, reason: string): Outcome;
99
+ report(finding: Finding): Outcome;
100
+ backend(check: string, entity: string, summary: string, detail: string, evidence: Exchange[], fixture?: string): Outcome;
101
+ security(check: string, entity: string, summary: string, detail: string, evidence: Exchange[], fixture?: string): Outcome;
102
+ spec(check: string, entity: string, summary: string, detail: string, evidence: Exchange[], fixture?: string): Outcome;
103
+ gap(check: string, entity: string, summary: string, detail: string, fixture?: string): Outcome;
104
+ blocked(check: string, entity: string, summary: string, cause: string, evidence?: Exchange[]): Outcome;
51
105
  checks(): string[];
52
106
  byVerdict(verdict: Verdict): Finding[];
53
107
  }
@@ -1 +1 @@
1
- {"version":3,"file":"finding.d.ts","sourceRoot":"","sources":["../../src/runtime/finding.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAE3C,MAAM,MAAM,OAAO,GAAG,aAAa,GAAG,UAAU,GAAG,UAAU,GAAG,WAAW,GAAG,cAAc,GAAG,SAAS,CAAA;AAExG,MAAM,WAAW,OAAO;IACvB,gGAAgG;IAChG,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,QAAQ,EAAE,CAAA;IACpB,qEAAqE;IACrE,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,iEAAiE;IACjE,OAAO,CAAC,EAAE,MAAM,CAAA;CAChB;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,YAAY;IAC5B,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,2DAA2D;IAC3D,MAAM,EAAE,MAAM,CAAA;CACd;AAOD,qBAAa,gBAAgB;IAC5B,QAAQ,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAK;IACjC,QAAQ,CAAC,YAAY,EAAE,YAAY,EAAE,CAAK;IAE1C;;;;OAIG;IACH,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS;IAKpE,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAI9B,OAAO,CACN,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,QAAQ,EAAE,EACpB,OAAO,CAAC,EAAE,MAAM,GACd,IAAI;IAIP,QAAQ,CACP,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,QAAQ,EAAE,EACpB,OAAO,CAAC,EAAE,MAAM,GACd,IAAI;IAIP,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;IAIlH,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;IAI3F,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAW5E,MAAM,IAAI,MAAM,EAAE;IAIlB,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,EAAE;CAGtC"}
1
+ {"version":3,"file":"finding.d.ts","sourceRoot":"","sources":["../../src/runtime/finding.ts"],"names":[],"mappings":"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"}
@@ -3,44 +3,106 @@
3
3
  * from what the evidence shows, which is what lets the report collapse cascades and lets the
4
4
  * conformance suite assert "exactly this defect was detected".
5
5
  */
6
+ /**
7
+ * Whether a finding is a root cause — what fails a run. Coverage gaps and blocks are what oat
8
+ * could not look at, not what it found. The console, the reports, the matrix and the exit code
9
+ * all ask this one question.
10
+ */
11
+ export function isRootCause(finding) {
12
+ return finding.verdict !== "COVERAGE_GAP" && finding.verdict !== "BLOCKED";
13
+ }
14
+ /** The property was tested and held — or, if the check reported along the way, did not. */
15
+ export const ASSERTED = Object.freeze({ kind: "asserted" });
16
+ /**
17
+ * The property held, and how the backend behaved is worth saying — a policy the document leaves
18
+ * open, such as whether unknown query parameters are rejected or ignored.
19
+ */
20
+ export function asserted(note) {
21
+ return { kind: "asserted", note };
22
+ }
23
+ /** The check does not apply here after all: what it tests is absent, for `reason`. */
24
+ export function standDown(reason) {
25
+ return { kind: "stood-down", reason };
26
+ }
6
27
  function withFixture(finding, fixture) {
7
28
  if (fixture === undefined || fixture === "")
8
29
  return finding;
9
30
  return { ...finding, fixture };
10
31
  }
11
32
  export class FindingCollector {
12
- findings = [];
13
- inconclusive = [];
33
+ findings;
34
+ inconclusive;
35
+ #operations;
36
+ #owner;
37
+ constructor(findings = [], inconclusive = [], operations, owner) {
38
+ this.findings = findings;
39
+ this.inconclusive = inconclusive;
40
+ this.#operations = operations;
41
+ this.#owner = owner;
42
+ }
43
+ /**
44
+ * A view that accepts findings only under `check`. Each check runs against one, so a check
45
+ * cannot report under another's id: a finding filed under the wrong id is proven by the wrong
46
+ * defect, and suppresses the wrong dependents.
47
+ */
48
+ ownedBy(check) {
49
+ return new FindingCollector(this.findings, this.inconclusive, this.#operations, check);
50
+ }
51
+ #own(check) {
52
+ if (this.#owner !== undefined && check !== this.#owner) {
53
+ throw new Error(`check "${this.#owner}" tried to report under "${check}"`);
54
+ }
55
+ }
56
+ /**
57
+ * A view over the same findings that attributes everything it records to `operations`.
58
+ *
59
+ * Each check runs against its own view, so a finding lands on the operations the check judges
60
+ * without threading an id through every call site. Read-only checks run concurrently, so a
61
+ * shared "current check" would attribute one check's finding to another.
62
+ */
63
+ attributed(operations) {
64
+ return new FindingCollector(this.findings, this.inconclusive, operations, this.#owner);
65
+ }
66
+ #stamp() {
67
+ return this.#operations === undefined ? {} : { operations: [...this.#operations] };
68
+ }
14
69
  /**
15
70
  * Records that a check ran without reaching a verdict. Returns `undefined` so a check can
16
71
  * `return ctx.findings.unresolved(...)` at the point it gives up, which keeps the reason
17
72
  * beside the condition that caused it rather than in a comment.
18
73
  */
19
74
  unresolved(check, entity, reason) {
20
- this.inconclusive.push({ check, entity, reason });
21
- return undefined;
75
+ this.#own(check);
76
+ this.inconclusive.push({ check, entity, reason, ...this.#stamp() });
77
+ return { kind: "unresolved", reason };
22
78
  }
23
79
  report(finding) {
24
- this.findings.push(finding);
80
+ this.#own(finding.check);
81
+ this.findings.push(finding.operations === undefined ? { ...finding, ...this.#stamp() } : finding);
82
+ if (finding.verdict === "COVERAGE_GAP")
83
+ return standDown(finding.summary);
84
+ if (finding.verdict === "BLOCKED")
85
+ return { kind: "unresolved", reason: finding.summary };
86
+ return { kind: "finding", verdict: finding.verdict };
25
87
  }
26
88
  backend(check, entity, summary, detail, evidence, fixture) {
27
- this.report(withFixture({ check, detail, entity, evidence, summary, verdict: "BACKEND_BUG" }, fixture));
89
+ return this.report(withFixture({ check, detail, entity, evidence, summary, verdict: "BACKEND_BUG" }, fixture));
28
90
  }
29
91
  security(check, entity, summary, detail, evidence, fixture) {
30
- this.report(withFixture({ check, detail, entity, evidence, summary, verdict: "SECURITY" }, fixture));
92
+ return this.report(withFixture({ check, detail, entity, evidence, summary, verdict: "SECURITY" }, fixture));
31
93
  }
32
94
  spec(check, entity, summary, detail, evidence, fixture) {
33
- this.report(withFixture({ check, detail, entity, evidence, summary, verdict: "SPEC_BUG" }, fixture));
95
+ return this.report(withFixture({ check, detail, entity, evidence, summary, verdict: "SPEC_BUG" }, fixture));
34
96
  }
35
97
  gap(check, entity, summary, detail, fixture) {
36
- this.report(withFixture({ check, detail, entity, evidence: [], summary, verdict: "COVERAGE_GAP" }, fixture));
98
+ return this.report(withFixture({ check, detail, entity, evidence: [], summary, verdict: "COVERAGE_GAP" }, fixture));
37
99
  }
38
- blocked(check, entity, summary, cause) {
39
- this.report({
100
+ blocked(check, entity, summary, cause, evidence = []) {
101
+ return this.report({
40
102
  check,
41
103
  detail: `blocked by ${cause}`,
42
104
  entity,
43
- evidence: [],
105
+ evidence,
44
106
  summary,
45
107
  verdict: "BLOCKED",
46
108
  });
@@ -1 +1 @@
1
- {"version":3,"file":"finding.js","sourceRoot":"","sources":["../../src/runtime/finding.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAoCH,SAAS,WAAW,CAAC,OAAgB,EAAE,OAAgB;IACtD,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,EAAE;QAAE,OAAO,OAAO,CAAA;IAC3D,OAAO,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,CAAA;AAC/B,CAAC;AAED,MAAM,OAAO,gBAAgB;IACnB,QAAQ,GAAc,EAAE,CAAA;IACxB,YAAY,GAAmB,EAAE,CAAA;IAE1C;;;;OAIG;IACH,UAAU,CAAC,KAAa,EAAE,MAAc,EAAE,MAAc;QACvD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;QACjD,OAAO,SAAS,CAAA;IACjB,CAAC;IAED,MAAM,CAAC,OAAgB;QACtB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAC5B,CAAC;IAED,OAAO,CACN,KAAa,EACb,MAAc,EACd,OAAe,EACf,MAAc,EACd,QAAoB,EACpB,OAAgB;QAEhB,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,EAAE,OAAO,CAAC,CAAC,CAAA;IACxG,CAAC;IAED,QAAQ,CACP,KAAa,EACb,MAAc,EACd,OAAe,EACf,MAAc,EACd,QAAoB,EACpB,OAAgB;QAEhB,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,OAAO,CAAC,CAAC,CAAA;IACrG,CAAC;IAED,IAAI,CAAC,KAAa,EAAE,MAAc,EAAE,OAAe,EAAE,MAAc,EAAE,QAAoB,EAAE,OAAgB;QAC1G,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,OAAO,CAAC,CAAC,CAAA;IACrG,CAAC;IAED,GAAG,CAAC,KAAa,EAAE,MAAc,EAAE,OAAe,EAAE,MAAc,EAAE,OAAgB;QACnF,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,EAAE,OAAO,CAAC,CAAC,CAAA;IAC7G,CAAC;IAED,OAAO,CAAC,KAAa,EAAE,MAAc,EAAE,OAAe,EAAE,KAAa;QACpE,IAAI,CAAC,MAAM,CAAC;YACX,KAAK;YACL,MAAM,EAAE,cAAc,KAAK,EAAE;YAC7B,MAAM;YACN,QAAQ,EAAE,EAAE;YACZ,OAAO;YACP,OAAO,EAAE,SAAS;SAClB,CAAC,CAAA;IACH,CAAC;IAED,MAAM;QACL,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;IAC9D,CAAC;IAED,SAAS,CAAC,OAAgB;QACzB,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,CAAA;IAC1D,CAAC;CACD"}
1
+ {"version":3,"file":"finding.js","sourceRoot":"","sources":["../../src/runtime/finding.ts"],"names":[],"mappings":"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"}
@@ -1,16 +1,19 @@
1
1
  /**
2
- * Schema-driven fixture generation.
2
+ * Schema-driven fixture generation: the discriminating cohort.
3
3
  *
4
4
  * Valid-random data cannot test a query engine: `ilike` needs a substring, `order` needs a total
5
- * order, escaping needs metacharacters. oat seeds a *discriminating cohort* — instances shaped so
6
- * that every query assertion has signal — and derives everything from a seed so a failing run is
5
+ * order, escaping needs metacharacters. oat seeds a *cohort* — one record per variant, each shaped
6
+ * so some query assertion has signal — and derives everything from a seed so a failing run is
7
7
  * exactly reproducible.
8
8
  *
9
- * After `$ref` inlining the same object identity can cycle, and empty schemas (`{}`, `true`,
10
- * `additionalProperties: {}`) mean "any value", not "walk this object again". Generation therefore
11
- * keys a WeakSet on every node and treats those open shapes as a scalar or `{}`.
9
+ * The values themselves come from `generate.ts`, the one place oat invents data, from the request
10
+ * schema as `spec/schema.ts` normalizes it. Every body is checked against that schema before it
11
+ * leaves; one that cannot be made valid is a gap naming the operation and the field, never a
12
+ * request the document forbids.
12
13
  */
13
- export type Variant = "baseline" | "lexical-first" | "lexical-last" | "null-heavy" | "unicode" | "metacharacter" | "boundary";
14
+ import { type Variant } from "./generate.ts";
15
+ export type { Variant } from "./generate.ts";
16
+ export { isVacuous } from "./generate.ts";
14
17
  export declare const COHORT: readonly Variant[];
15
18
  /** Deterministic PRNG — same seed, same cohort, every run. */
16
19
  export declare function mulberry32(seed: number): () => number;
@@ -19,39 +22,43 @@ export interface CohortMember {
19
22
  variant: Variant;
20
23
  body: Record<string, unknown>;
21
24
  }
22
- /** Thrown when a walk still overflows; the pointer names the node that blew the stack. */
25
+ /**
26
+ * Thrown when no valid body can be built for an operation. The pointer names the field; the
27
+ * reason says why — and the fix is `hooks.resolveInput`, which can supply what the schema cannot.
28
+ */
23
29
  export declare class FixtureOverflow extends Error {
24
30
  readonly operationId: string;
25
31
  readonly pointer: string;
26
- constructor(operationId: string, pointer: string);
32
+ readonly reason?: string | undefined;
33
+ constructor(operationId: string, pointer: string, reason?: string | undefined);
27
34
  }
28
35
  export declare function overflowFrom(error: unknown, operationId: string, pointer?: string): FixtureOverflow;
29
36
  export declare function isOverflowError(error: unknown): boolean;
37
+ export interface CohortOptions {
38
+ /** Recursive schemas the document refers to as `oat-defs#/$defs/<name>`. */
39
+ defs?: Record<string, Schema>;
40
+ /** Per-run token for values that must not collide with an earlier run's. */
41
+ nonce?: string;
42
+ /** Top-level fields whose values must be distinct across runs too — the x-unique columns. */
43
+ distinct?: ReadonlySet<string>;
44
+ }
45
+ /** One body per variant, each valid for the schema — or a `FixtureOverflow` naming what is not. */
46
+ export declare function buildCohort(bodySchema: Schema | boolean, seed: number, variants?: readonly Variant[], operationId?: string, options?: CohortOptions): CohortMember[];
30
47
  /**
31
- * Makes unique-set tuples differ across cohort members without relaxing `maxLength` / `pattern`.
32
- *
33
- * When the document cannot express two distinct values, extra variants are dropped and the
34
- * caller records a gap.
35
- */
36
- export declare function ensureDistinctUniqueValues(members: CohortMember[], sets: string[][], schema: Schema | boolean): {
37
- members: CohortMember[];
38
- gap: string | null;
39
- };
40
- export declare function buildCohort(bodySchema: Schema | boolean, seed: number, variants?: readonly Variant[], operationId?: string): CohortMember[];
41
- /**
42
- * One create body, or a gap if a required field cannot be honoured.
43
- *
44
- * Optional fields that cannot match `format`/`pattern` are omitted. Required ones must not fall
45
- * back to `"Quarterly Report N"` — that is what 400s every email/handle/url field.
48
+ * One body, with the required fields that could not be made rather than an exception — for
49
+ * callers that report each gap themselves. Optional fields that cannot be made are left out.
46
50
  */
47
51
  export declare function generateBody(bodySchema: Schema | boolean, variant: Variant, rand: () => number, index: number, operationId?: string): {
48
52
  body: Record<string, unknown>;
49
53
  missingRequired: string[];
50
54
  };
51
55
  /**
52
- * `{}` / `true` / a lone `additionalProperties: {}` is "any JSON", not an object to descend.
53
- * Walking it again is what turns `z.unknown()` into a stack overflow.
56
+ * Makes unique-set tuples differ across cohort members, by drawing new values from each
57
+ * column's schema. When the document cannot express two distinct values — a two-value enum and
58
+ * seven members — the extra members are dropped and the caller records a gap.
54
59
  */
55
- export declare function isVacuous(schema: unknown): boolean;
56
- export {};
60
+ export declare function ensureDistinctUniqueValues(members: CohortMember[], sets: string[][], schema: Schema | boolean, options?: CohortOptions): {
61
+ members: CohortMember[];
62
+ gap: string | null;
63
+ };
57
64
  //# sourceMappingURL=fixture.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fixture.d.ts","sourceRoot":"","sources":["../../src/runtime/fixture.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,MAAM,MAAM,OAAO,GAChB,UAAU,GACV,eAAe,GACf,cAAc,GACd,YAAY,GACZ,SAAS,GACT,eAAe,GACf,UAAU,CAAA;AAEb,eAAO,MAAM,MAAM,EAAE,SAAS,OAAO,EAQpC,CAAA;AAED,8DAA8D;AAC9D,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,MAAM,CAQrD;AAED,KAAK,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAgBrC,MAAM,WAAW,YAAY;IAC5B,OAAO,EAAE,OAAO,CAAA;IAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC7B;AAED,0FAA0F;AAC1F,qBAAa,eAAgB,SAAQ,KAAK;IAExC,QAAQ,CAAC,WAAW,EAAE,MAAM;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM;gBADf,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM;CAKzB;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,SAAM,GAAG,eAAe,CAKhG;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAGvD;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CACzC,OAAO,EAAE,YAAY,EAAE,EACvB,IAAI,EAAE,MAAM,EAAE,EAAE,EAChB,MAAM,EAAE,MAAM,GAAG,OAAO,GACtB;IAAE,OAAO,EAAE,YAAY,EAAE,CAAC;IAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAwBjD;AAuED,wBAAgB,WAAW,CAC1B,UAAU,EAAE,MAAM,GAAG,OAAO,EAC5B,IAAI,EAAE,MAAM,EACZ,QAAQ,GAAE,SAAS,OAAO,EAAW,EACrC,WAAW,SAAY,GACrB,YAAY,EAAE,CAmBhB;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAC3B,UAAU,EAAE,MAAM,GAAG,OAAO,EAC5B,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,MAAM,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,WAAW,SAAY,GACrB;IAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,eAAe,EAAE,MAAM,EAAE,CAAA;CAAE,CAc9D;AAkgBD;;;GAGG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAgBlD"}
1
+ {"version":3,"file":"fixture.d.ts","sourceRoot":"","sources":["../../src/runtime/fixture.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,EAAE,KAAK,OAAO,EAAuB,MAAM,eAAe,CAAA;AAGjE,YAAY,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAEzC,eAAO,MAAM,MAAM,EAAE,SAAS,OAAO,EAQpC,CAAA;AAED,8DAA8D;AAC9D,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,MAAM,CAQrD;AAED,KAAK,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAErC,MAAM,WAAW,YAAY;IAC5B,OAAO,EAAE,OAAO,CAAA;IAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC7B;AAED;;;GAGG;AACH,qBAAa,eAAgB,SAAQ,KAAK;IAExC,QAAQ,CAAC,WAAW,EAAE,MAAM;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM;gBAFf,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,MAAM,YAAA;CASzB;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,SAAM,GAAG,eAAe,CAKhG;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAGvD;AAED,MAAM,WAAW,aAAa;IAC7B,4EAA4E;IAC5E,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC7B,4EAA4E;IAC5E,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,6FAA6F;IAC7F,QAAQ,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;CAC9B;AAMD,mGAAmG;AACnG,wBAAgB,WAAW,CAC1B,UAAU,EAAE,MAAM,GAAG,OAAO,EAC5B,IAAI,EAAE,MAAM,EACZ,QAAQ,GAAE,SAAS,OAAO,EAAW,EACrC,WAAW,SAAY,EACvB,OAAO,GAAE,aAAkB,GACzB,YAAY,EAAE,CAoBhB;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC3B,UAAU,EAAE,MAAM,GAAG,OAAO,EAC5B,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,MAAM,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,WAAW,SAAY,GACrB;IAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,eAAe,EAAE,MAAM,EAAE,CAAA;CAAE,CAe9D;AAMD;;;;GAIG;AACH,wBAAgB,0BAA0B,CACzC,OAAO,EAAE,YAAY,EAAE,EACvB,IAAI,EAAE,MAAM,EAAE,EAAE,EAChB,MAAM,EAAE,MAAM,GAAG,OAAO,EACxB,OAAO,GAAE,aAAkB,GACzB;IAAE,OAAO,EAAE,YAAY,EAAE,CAAC;IAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAgCjD"}