@nekostack/schema 1.0.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 (214) hide show
  1. package/CHANGELOG.md +422 -0
  2. package/LICENSE +202 -0
  3. package/README.md +656 -0
  4. package/dist/src/builders/array.d.ts +12 -0
  5. package/dist/src/builders/array.d.ts.map +1 -0
  6. package/dist/src/builders/array.js +29 -0
  7. package/dist/src/builders/array.js.map +1 -0
  8. package/dist/src/builders/object.d.ts +62 -0
  9. package/dist/src/builders/object.d.ts.map +1 -0
  10. package/dist/src/builders/object.js +263 -0
  11. package/dist/src/builders/object.js.map +1 -0
  12. package/dist/src/builders/primitives.d.ts +37 -0
  13. package/dist/src/builders/primitives.d.ts.map +1 -0
  14. package/dist/src/builders/primitives.js +125 -0
  15. package/dist/src/builders/primitives.js.map +1 -0
  16. package/dist/src/builders/s.d.ts +27 -0
  17. package/dist/src/builders/s.d.ts.map +1 -0
  18. package/dist/src/builders/s.js +39 -0
  19. package/dist/src/builders/s.js.map +1 -0
  20. package/dist/src/builders/schema.d.ts +70 -0
  21. package/dist/src/builders/schema.d.ts.map +1 -0
  22. package/dist/src/builders/schema.js +98 -0
  23. package/dist/src/builders/schema.js.map +1 -0
  24. package/dist/src/cli-integration.d.ts +43 -0
  25. package/dist/src/cli-integration.d.ts.map +1 -0
  26. package/dist/src/cli-integration.js +48 -0
  27. package/dist/src/cli-integration.js.map +1 -0
  28. package/dist/src/errors/issue.d.ts +34 -0
  29. package/dist/src/errors/issue.d.ts.map +1 -0
  30. package/dist/src/errors/issue.js +89 -0
  31. package/dist/src/errors/issue.js.map +1 -0
  32. package/dist/src/generators/errors.d.ts +31 -0
  33. package/dist/src/generators/errors.d.ts.map +1 -0
  34. package/dist/src/generators/errors.js +34 -0
  35. package/dist/src/generators/errors.js.map +1 -0
  36. package/dist/src/generators/header.d.ts +42 -0
  37. package/dist/src/generators/header.d.ts.map +1 -0
  38. package/dist/src/generators/header.js +43 -0
  39. package/dist/src/generators/header.js.map +1 -0
  40. package/dist/src/generators/json-schema-meta.d.ts +36 -0
  41. package/dist/src/generators/json-schema-meta.d.ts.map +1 -0
  42. package/dist/src/generators/json-schema-meta.js +35 -0
  43. package/dist/src/generators/json-schema-meta.js.map +1 -0
  44. package/dist/src/generators/json-schema.d.ts +26 -0
  45. package/dist/src/generators/json-schema.d.ts.map +1 -0
  46. package/dist/src/generators/json-schema.js +88 -0
  47. package/dist/src/generators/json-schema.js.map +1 -0
  48. package/dist/src/generators/openapi.d.ts +33 -0
  49. package/dist/src/generators/openapi.d.ts.map +1 -0
  50. package/dist/src/generators/openapi.js +61 -0
  51. package/dist/src/generators/openapi.js.map +1 -0
  52. package/dist/src/generators/schema-fragment.d.ts +55 -0
  53. package/dist/src/generators/schema-fragment.d.ts.map +1 -0
  54. package/dist/src/generators/schema-fragment.js +253 -0
  55. package/dist/src/generators/schema-fragment.js.map +1 -0
  56. package/dist/src/generators/ts.d.ts +19 -0
  57. package/dist/src/generators/ts.d.ts.map +1 -0
  58. package/dist/src/generators/ts.js +252 -0
  59. package/dist/src/generators/ts.js.map +1 -0
  60. package/dist/src/generators/types.d.ts +96 -0
  61. package/dist/src/generators/types.d.ts.map +1 -0
  62. package/dist/src/generators/types.js +10 -0
  63. package/dist/src/generators/types.js.map +1 -0
  64. package/dist/src/generators/version.d.ts +11 -0
  65. package/dist/src/generators/version.d.ts.map +1 -0
  66. package/dist/src/generators/version.js +11 -0
  67. package/dist/src/generators/version.js.map +1 -0
  68. package/dist/src/generators/zod-mapping.d.ts +90 -0
  69. package/dist/src/generators/zod-mapping.d.ts.map +1 -0
  70. package/dist/src/generators/zod-mapping.js +174 -0
  71. package/dist/src/generators/zod-mapping.js.map +1 -0
  72. package/dist/src/generators/zod.d.ts +17 -0
  73. package/dist/src/generators/zod.d.ts.map +1 -0
  74. package/dist/src/generators/zod.js +118 -0
  75. package/dist/src/generators/zod.js.map +1 -0
  76. package/dist/src/index.d.ts +21 -0
  77. package/dist/src/index.d.ts.map +1 -0
  78. package/dist/src/index.js +43 -0
  79. package/dist/src/index.js.map +1 -0
  80. package/dist/src/ir/hash.d.ts +19 -0
  81. package/dist/src/ir/hash.d.ts.map +1 -0
  82. package/dist/src/ir/hash.js +22 -0
  83. package/dist/src/ir/hash.js.map +1 -0
  84. package/dist/src/ir/nodes.d.ts +121 -0
  85. package/dist/src/ir/nodes.d.ts.map +1 -0
  86. package/dist/src/ir/nodes.js +14 -0
  87. package/dist/src/ir/nodes.js.map +1 -0
  88. package/dist/src/ir/serialize.d.ts +8 -0
  89. package/dist/src/ir/serialize.d.ts.map +1 -0
  90. package/dist/src/ir/serialize.js +23 -0
  91. package/dist/src/ir/serialize.js.map +1 -0
  92. package/dist/src/migrations/build-migration-registry.d.ts +46 -0
  93. package/dist/src/migrations/build-migration-registry.d.ts.map +1 -0
  94. package/dist/src/migrations/build-migration-registry.js +134 -0
  95. package/dist/src/migrations/build-migration-registry.js.map +1 -0
  96. package/dist/src/migrations/handlers/list.d.ts +35 -0
  97. package/dist/src/migrations/handlers/list.d.ts.map +1 -0
  98. package/dist/src/migrations/handlers/list.js +55 -0
  99. package/dist/src/migrations/handlers/list.js.map +1 -0
  100. package/dist/src/migrations/handlers/plan.d.ts +26 -0
  101. package/dist/src/migrations/handlers/plan.d.ts.map +1 -0
  102. package/dist/src/migrations/handlers/plan.js +28 -0
  103. package/dist/src/migrations/handlers/plan.js.map +1 -0
  104. package/dist/src/migrations/handlers/stub.d.ts +22 -0
  105. package/dist/src/migrations/handlers/stub.d.ts.map +1 -0
  106. package/dist/src/migrations/handlers/stub.js +24 -0
  107. package/dist/src/migrations/handlers/stub.js.map +1 -0
  108. package/dist/src/migrations/handlers/verify.d.ts +25 -0
  109. package/dist/src/migrations/handlers/verify.d.ts.map +1 -0
  110. package/dist/src/migrations/handlers/verify.js +27 -0
  111. package/dist/src/migrations/handlers/verify.js.map +1 -0
  112. package/dist/src/migrations/parse-provenance.d.ts +78 -0
  113. package/dist/src/migrations/parse-provenance.d.ts.map +1 -0
  114. package/dist/src/migrations/parse-provenance.js +157 -0
  115. package/dist/src/migrations/parse-provenance.js.map +1 -0
  116. package/dist/src/migrations/plan-migration.d.ts +50 -0
  117. package/dist/src/migrations/plan-migration.d.ts.map +1 -0
  118. package/dist/src/migrations/plan-migration.js +256 -0
  119. package/dist/src/migrations/plan-migration.js.map +1 -0
  120. package/dist/src/migrations/stub.d.ts +55 -0
  121. package/dist/src/migrations/stub.d.ts.map +1 -0
  122. package/dist/src/migrations/stub.js +201 -0
  123. package/dist/src/migrations/stub.js.map +1 -0
  124. package/dist/src/migrations/types.d.ts +297 -0
  125. package/dist/src/migrations/types.d.ts.map +1 -0
  126. package/dist/src/migrations/types.js +28 -0
  127. package/dist/src/migrations/types.js.map +1 -0
  128. package/dist/src/migrations/verify-provenance.d.ts +46 -0
  129. package/dist/src/migrations/verify-provenance.d.ts.map +1 -0
  130. package/dist/src/migrations/verify-provenance.js +158 -0
  131. package/dist/src/migrations/verify-provenance.js.map +1 -0
  132. package/dist/src/registry/build-registry.d.ts +65 -0
  133. package/dist/src/registry/build-registry.d.ts.map +1 -0
  134. package/dist/src/registry/build-registry.js +172 -0
  135. package/dist/src/registry/build-registry.js.map +1 -0
  136. package/dist/src/registry/diff.d.ts +25 -0
  137. package/dist/src/registry/diff.d.ts.map +1 -0
  138. package/dist/src/registry/diff.js +497 -0
  139. package/dist/src/registry/diff.js.map +1 -0
  140. package/dist/src/registry/handlers/check.d.ts +57 -0
  141. package/dist/src/registry/handlers/check.d.ts.map +1 -0
  142. package/dist/src/registry/handlers/check.js +181 -0
  143. package/dist/src/registry/handlers/check.js.map +1 -0
  144. package/dist/src/registry/handlers/diff.d.ts +33 -0
  145. package/dist/src/registry/handlers/diff.d.ts.map +1 -0
  146. package/dist/src/registry/handlers/diff.js +61 -0
  147. package/dist/src/registry/handlers/diff.js.map +1 -0
  148. package/dist/src/registry/handlers/generate.d.ts +87 -0
  149. package/dist/src/registry/handlers/generate.d.ts.map +1 -0
  150. package/dist/src/registry/handlers/generate.js +223 -0
  151. package/dist/src/registry/handlers/generate.js.map +1 -0
  152. package/dist/src/registry/handlers/list.d.ts +36 -0
  153. package/dist/src/registry/handlers/list.d.ts.map +1 -0
  154. package/dist/src/registry/handlers/list.js +84 -0
  155. package/dist/src/registry/handlers/list.js.map +1 -0
  156. package/dist/src/registry/parse-provenance.d.ts +63 -0
  157. package/dist/src/registry/parse-provenance.d.ts.map +1 -0
  158. package/dist/src/registry/parse-provenance.js +182 -0
  159. package/dist/src/registry/parse-provenance.js.map +1 -0
  160. package/dist/src/registry/source-hash.d.ts +28 -0
  161. package/dist/src/registry/source-hash.d.ts.map +1 -0
  162. package/dist/src/registry/source-hash.js +32 -0
  163. package/dist/src/registry/source-hash.js.map +1 -0
  164. package/dist/src/registry/types.d.ts +185 -0
  165. package/dist/src/registry/types.d.ts.map +1 -0
  166. package/dist/src/registry/types.js +22 -0
  167. package/dist/src/registry/types.js.map +1 -0
  168. package/dist/src/runtime/compile.d.ts +38 -0
  169. package/dist/src/runtime/compile.d.ts.map +1 -0
  170. package/dist/src/runtime/compile.js +45 -0
  171. package/dist/src/runtime/compile.js.map +1 -0
  172. package/dist/src/runtime/errors.d.ts +25 -0
  173. package/dist/src/runtime/errors.d.ts.map +1 -0
  174. package/dist/src/runtime/errors.js +43 -0
  175. package/dist/src/runtime/errors.js.map +1 -0
  176. package/dist/src/runtime/normalize-issues.d.ts +65 -0
  177. package/dist/src/runtime/normalize-issues.d.ts.map +1 -0
  178. package/dist/src/runtime/normalize-issues.js +208 -0
  179. package/dist/src/runtime/normalize-issues.js.map +1 -0
  180. package/dist/src/runtime/parse.d.ts +62 -0
  181. package/dist/src/runtime/parse.d.ts.map +1 -0
  182. package/dist/src/runtime/parse.js +107 -0
  183. package/dist/src/runtime/parse.js.map +1 -0
  184. package/dist/src/runtime/strip-defaults.d.ts +51 -0
  185. package/dist/src/runtime/strip-defaults.d.ts.map +1 -0
  186. package/dist/src/runtime/strip-defaults.js +81 -0
  187. package/dist/src/runtime/strip-defaults.js.map +1 -0
  188. package/dist/src/runtime/zod-compile.d.ts +27 -0
  189. package/dist/src/runtime/zod-compile.d.ts.map +1 -0
  190. package/dist/src/runtime/zod-compile.js +92 -0
  191. package/dist/src/runtime/zod-compile.js.map +1 -0
  192. package/dist/src/types.d.ts +116 -0
  193. package/dist/src/types.d.ts.map +1 -0
  194. package/dist/src/types.js +2 -0
  195. package/dist/src/types.js.map +1 -0
  196. package/docs/ABSENCE_SEMANTICS.md +37 -0
  197. package/docs/BENCHMARKS.md +64 -0
  198. package/docs/COMPOSITION.md +206 -0
  199. package/docs/DIFF_CLASSIFICATION.md +137 -0
  200. package/docs/EXAMPLES.md +221 -0
  201. package/docs/HEADER_FORMAT.md +66 -0
  202. package/docs/INVARIANTS.md +58 -0
  203. package/docs/IR_CONTRACT.md +67 -0
  204. package/docs/ISSUE_CODES.md +99 -0
  205. package/docs/JSON_SCHEMA_MAPPING.md +149 -0
  206. package/docs/MIGRATIONS.md +406 -0
  207. package/docs/MIGRATION_GUIDE.md +150 -0
  208. package/docs/OPENAPI_MAPPING.md +66 -0
  209. package/docs/REGISTRY.md +336 -0
  210. package/docs/RUNTIME.md +279 -0
  211. package/docs/SCOPE.md +119 -0
  212. package/docs/USAGE.md +376 -0
  213. package/docs/ZOD_MODIFIER_ORDERING.md +77 -0
  214. package/package.json +45 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"array.d.ts","sourceRoot":"","sources":["../../../src/builders/array.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAEjD,qBAAa,WAAW,CAAC,CAAC,SAAS,SAAS,CAAE,SAAQ,MAAM,CAC1D,KAAK,CAAC,CAAC,CAAC,EAAE,EACV,MAAM,CAAC,CAAC,CAAC,EAAE,EACX,UAAU,EACV,UAAU,CACX;IAEG,OAAO,CAAC,QAAQ,CAAC,aAAa;gBAAb,aAAa,EAAE,CAAC,EACjC,IAAI,CAAC,EAAE,SAAS;IAKlB,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAIvC,IAAI,OAAO,IAAI,CAAC,CAEf;IAED,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC;IAQlC,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC;CAOnC"}
@@ -0,0 +1,29 @@
1
+ import { Schema } from "./schema.js";
2
+ export class ArraySchema extends Schema {
3
+ elementSchema;
4
+ constructor(elementSchema, node) {
5
+ super(node ?? { kind: "array", element: elementSchema.node });
6
+ this.elementSchema = elementSchema;
7
+ }
8
+ clone(node) {
9
+ return new ArraySchema(this.elementSchema, node);
10
+ }
11
+ get element() {
12
+ return this.elementSchema;
13
+ }
14
+ min(items) {
15
+ return this.withRefinement({
16
+ kind: "portable",
17
+ name: "minItems",
18
+ params: { value: items },
19
+ });
20
+ }
21
+ max(items) {
22
+ return this.withRefinement({
23
+ kind: "portable",
24
+ name: "maxItems",
25
+ params: { value: items },
26
+ });
27
+ }
28
+ }
29
+ //# sourceMappingURL=array.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"array.js","sourceRoot":"","sources":["../../../src/builders/array.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAkB,MAAM,aAAa,CAAC;AAGrD,MAAM,OAAO,WAAiC,SAAQ,MAKrD;IAEoB;IADnB,YACmB,aAAgB,EACjC,IAAgB;QAEhB,KAAK,CAAC,IAAI,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC;QAH7C,kBAAa,GAAb,aAAa,CAAG;IAInC,CAAC;IAES,KAAK,CAAC,IAAgB;QAC9B,OAAO,IAAI,WAAW,CAAI,IAAI,CAAC,aAAa,EAAE,IAAiB,CAAS,CAAC;IAC3E,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED,GAAG,CAAC,KAAa;QACf,OAAO,IAAI,CAAC,cAAc,CAAC;YACzB,IAAI,EAAE,UAAU;YAChB,IAAI,EAAE,UAAU;YAChB,MAAM,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE;SACzB,CAAC,CAAC;IACL,CAAC;IAED,GAAG,CAAC,KAAa;QACf,OAAO,IAAI,CAAC,cAAc,CAAC;YACzB,IAAI,EAAE,UAAU;YAChB,IAAI,EAAE,UAAU;YAChB,MAAM,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE;SACzB,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -0,0 +1,62 @@
1
+ import type { ObjectNode, SchemaNode } from "../ir/nodes.js";
2
+ import { Schema } from "./schema.js";
3
+ import type { ExtendShape, InferObjectInput, InferObjectOutput, Mask, MergeLeftShape, MergeOptions, MergeRightShape, MergeThrowShape, OmitShape, OverrideMask, OverrideShape, PartialByShape, PartialShape, PickShape, RawShape, RequiredByShape, RequiredShape } from "../types.js";
4
+ export declare class ObjectSchema<S extends RawShape> extends Schema<InferObjectInput<S>, InferObjectOutput<S>, "required", "required"> {
5
+ private readonly shape;
6
+ constructor(shape: S, node?: ObjectNode);
7
+ protected clone(node: SchemaNode): this;
8
+ /** Access the original shape map (preserves subclass-specific methods). */
9
+ get fields(): Readonly<S>;
10
+ strict(): ObjectSchema<S>;
11
+ stripUnknown(): ObjectSchema<S>;
12
+ passthrough(): ObjectSchema<S>;
13
+ private withUnknownKeys;
14
+ /**
15
+ * Add new fields to this object. Decision #1: throws if any key in the
16
+ * extension already exists in the base. To deliberately replace a field,
17
+ * use {@link override}.
18
+ */
19
+ extend<E extends RawShape>(extension: E): ObjectSchema<ExtendShape<S, E>>;
20
+ /**
21
+ * Keep only the named keys. Decision #5: throws on any key not in the base.
22
+ */
23
+ pick<M extends Mask<S>>(keys: M): ObjectSchema<PickShape<S, M>>;
24
+ /**
25
+ * Drop the named keys. Decision #5: throws on any key not in the base.
26
+ */
27
+ omit<M extends Mask<S>>(keys: M): ObjectSchema<OmitShape<S, M>>;
28
+ /**
29
+ * Make fields optional. Decision #6 + #9: strips `default` from affected
30
+ * fields (symmetric with {@link required}). Defaults are explicitly NOT
31
+ * preserved — a partial schema should not silently inject defaults into a
32
+ * PATCH/update payload.
33
+ */
34
+ partial(): ObjectSchema<PartialShape<S>>;
35
+ partial<M extends Mask<S>>(keys: M): ObjectSchema<PartialByShape<S, M>>;
36
+ /**
37
+ * Make fields required. Decision #8 + #9: strips both `optional` AND
38
+ * `default` from affected fields (symmetric with {@link partial}).
39
+ */
40
+ required(): ObjectSchema<RequiredShape<S>>;
41
+ required<M extends Mask<S>>(keys: M): ObjectSchema<RequiredByShape<S, M>>;
42
+ /**
43
+ * Combine two object schemas. Decision #3 + #13: conflicts in fields OR
44
+ * in unknown-key policy throw by default; resolve explicitly with the
45
+ * `conflict` / `unknownKeys` options.
46
+ */
47
+ merge<Other extends RawShape>(other: ObjectSchema<Other>, options?: MergeOptions & {
48
+ conflict?: "throw";
49
+ }): ObjectSchema<MergeThrowShape<S, Other>>;
50
+ merge<Other extends RawShape>(other: ObjectSchema<Other>, options: MergeOptions & {
51
+ conflict: "left";
52
+ }): ObjectSchema<MergeLeftShape<S, Other>>;
53
+ merge<Other extends RawShape>(other: ObjectSchema<Other>, options: MergeOptions & {
54
+ conflict: "right";
55
+ }): ObjectSchema<MergeRightShape<S, Other>>;
56
+ /**
57
+ * Replace existing fields' schemas. Decision #2: throws if any key in the
58
+ * override is NOT in the base. To add new fields, use {@link extend}.
59
+ */
60
+ override<O extends OverrideMask<S>>(overrides: O): ObjectSchema<OverrideShape<S, O>>;
61
+ }
62
+ //# sourceMappingURL=object.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"object.d.ts","sourceRoot":"","sources":["../../../src/builders/object.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,263 @@
1
+ import { Schema } from "./schema.js";
2
+ export class ObjectSchema extends Schema {
3
+ shape;
4
+ constructor(shape, node) {
5
+ super(node ?? {
6
+ kind: "object",
7
+ fields: mapShapeToFields(shape),
8
+ unknownKeys: "strict",
9
+ });
10
+ this.shape = shape;
11
+ }
12
+ clone(node) {
13
+ return new ObjectSchema(this.shape, node);
14
+ }
15
+ /** Access the original shape map (preserves subclass-specific methods). */
16
+ get fields() {
17
+ return this.shape;
18
+ }
19
+ // ---- Unknown-key policy (strict is the default) ----
20
+ strict() {
21
+ return this.withUnknownKeys("strict");
22
+ }
23
+ stripUnknown() {
24
+ return this.withUnknownKeys("stripUnknown");
25
+ }
26
+ passthrough() {
27
+ return this.withUnknownKeys("passthrough");
28
+ }
29
+ withUnknownKeys(policy) {
30
+ const current = this.node;
31
+ return new ObjectSchema(this.shape, {
32
+ ...current,
33
+ unknownKeys: policy,
34
+ });
35
+ }
36
+ // ===========================================================================
37
+ // Composition operators (v0.5) — see docs/COMPOSITION.md for the contract.
38
+ //
39
+ // All operators:
40
+ // - return a NEW ObjectSchema (no mutation)
41
+ // - drop top-level metadata (id / version / description / deprecated) —
42
+ // callers must re-tag the composed result
43
+ // - preserve field-level metadata
44
+ // - fail loudly on collisions / unknown keys / missing keys
45
+ // ===========================================================================
46
+ /**
47
+ * Add new fields to this object. Decision #1: throws if any key in the
48
+ * extension already exists in the base. To deliberately replace a field,
49
+ * use {@link override}.
50
+ */
51
+ extend(extension) {
52
+ const collisions = Object.keys(extension).filter((k) => k in this.shape);
53
+ if (collisions.length > 0) {
54
+ throw new Error(`ObjectSchema.extend: key${collisions.length === 1 ? "" : "s"} already exists in base — ${formatKeys(collisions)}. Use .override() to replace deliberately, or .merge() with an explicit conflict policy.`);
55
+ }
56
+ const newShape = { ...this.shape, ...extension };
57
+ return composedObject(newShape, currentUnknownKeys(this.node));
58
+ }
59
+ /**
60
+ * Keep only the named keys. Decision #5: throws on any key not in the base.
61
+ */
62
+ pick(keys) {
63
+ assertMaskKeysInShape("pick", keys, this.shape);
64
+ const newShape = {};
65
+ for (const key of Object.keys(keys)) {
66
+ if (keys[key] === true) {
67
+ newShape[key] = this.shape[key];
68
+ }
69
+ }
70
+ return composedObject(newShape, currentUnknownKeys(this.node));
71
+ }
72
+ /**
73
+ * Drop the named keys. Decision #5: throws on any key not in the base.
74
+ */
75
+ omit(keys) {
76
+ assertMaskKeysInShape("omit", keys, this.shape);
77
+ const newShape = {};
78
+ for (const key of Object.keys(this.shape)) {
79
+ if (keys[key] !== true) {
80
+ newShape[key] = this.shape[key];
81
+ }
82
+ }
83
+ return composedObject(newShape, currentUnknownKeys(this.node));
84
+ }
85
+ partial(keys) {
86
+ if (keys !== undefined)
87
+ assertMaskKeysInShape("partial", keys, this.shape);
88
+ const newShape = {};
89
+ for (const key of Object.keys(this.shape)) {
90
+ const affected = keys === undefined || keys[key] === true;
91
+ newShape[key] = affected
92
+ ? makePartial(this.shape[key])
93
+ : this.shape[key];
94
+ }
95
+ return composedObject(newShape, currentUnknownKeys(this.node));
96
+ }
97
+ required(keys) {
98
+ if (keys !== undefined)
99
+ assertMaskKeysInShape("required", keys, this.shape);
100
+ const newShape = {};
101
+ for (const key of Object.keys(this.shape)) {
102
+ const affected = keys === undefined || keys[key] === true;
103
+ newShape[key] = affected
104
+ ? makeRequired(this.shape[key])
105
+ : this.shape[key];
106
+ }
107
+ return composedObject(newShape, currentUnknownKeys(this.node));
108
+ }
109
+ // Implementation signature — wider than any single overload because the
110
+ // narrowed return types from the overloads (MergeThrowShape /
111
+ // MergeLeftShape / MergeRightShape) aren't assignable to each other under
112
+ // ObjectSchema's private-field-induced invariance. `any` here is the
113
+ // pragmatic escape; callers only see the typed overloads.
114
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
115
+ merge(other, options = {}) {
116
+ const conflictPolicy = options.conflict ?? "throw";
117
+ const unknownPolicy = options.unknownKeys ?? "throw";
118
+ const otherShape = other.fields;
119
+ // Field-level resolution
120
+ const newShape = { ...this.shape };
121
+ const fieldCollisions = [];
122
+ for (const key of Object.keys(otherShape)) {
123
+ if (key in this.shape) {
124
+ if (conflictPolicy === "throw") {
125
+ fieldCollisions.push(key);
126
+ }
127
+ else if (conflictPolicy === "right") {
128
+ newShape[key] = otherShape[key];
129
+ }
130
+ // "left" → keep existing
131
+ }
132
+ else {
133
+ newShape[key] = otherShape[key];
134
+ }
135
+ }
136
+ if (fieldCollisions.length > 0) {
137
+ throw new Error(`ObjectSchema.merge: field${fieldCollisions.length === 1 ? "" : "s"} ${formatKeys(fieldCollisions)} ${fieldCollisions.length === 1 ? "exists" : "exist"} in both operands. Pass { conflict: "left" } or { conflict: "right" } to resolve.`);
138
+ }
139
+ // unknownKeys resolution
140
+ const leftPolicy = currentUnknownKeys(this.node);
141
+ const rightPolicy = currentUnknownKeys(other.node);
142
+ let resolvedPolicy;
143
+ if (leftPolicy === rightPolicy) {
144
+ resolvedPolicy = leftPolicy;
145
+ }
146
+ else if (unknownPolicy === "throw") {
147
+ throw new Error(`ObjectSchema.merge: unknownKeys policies differ — left is "${leftPolicy}", right is "${rightPolicy}". Pass { unknownKeys: "left" } or { unknownKeys: "right" } to resolve.`);
148
+ }
149
+ else if (unknownPolicy === "left") {
150
+ resolvedPolicy = leftPolicy;
151
+ }
152
+ else {
153
+ resolvedPolicy = rightPolicy;
154
+ }
155
+ return composedObject(newShape, resolvedPolicy);
156
+ }
157
+ /**
158
+ * Replace existing fields' schemas. Decision #2: throws if any key in the
159
+ * override is NOT in the base. To add new fields, use {@link extend}.
160
+ */
161
+ override(overrides) {
162
+ const unknown = Object.keys(overrides).filter((k) => !(k in this.shape));
163
+ if (unknown.length > 0) {
164
+ throw new Error(`ObjectSchema.override: key${unknown.length === 1 ? "" : "s"} ${formatKeys(unknown)} ${unknown.length === 1 ? "does" : "do"} not exist in base. Use .extend() to add new fields.`);
165
+ }
166
+ const newShape = { ...this.shape };
167
+ for (const key of Object.keys(overrides)) {
168
+ const replacement = overrides[key];
169
+ if (replacement !== undefined) {
170
+ newShape[key] = replacement;
171
+ }
172
+ }
173
+ return composedObject(newShape, currentUnknownKeys(this.node));
174
+ }
175
+ }
176
+ // ===========================================================================
177
+ // helpers
178
+ // ===========================================================================
179
+ function mapShapeToFields(shape) {
180
+ const out = {};
181
+ for (const key of Object.keys(shape)) {
182
+ const field = shape[key];
183
+ out[key] = field.node;
184
+ }
185
+ return out;
186
+ }
187
+ function currentUnknownKeys(node) {
188
+ return node.unknownKeys;
189
+ }
190
+ function formatKeys(keys) {
191
+ return keys.map((k) => `'${k}'`).join(", ");
192
+ }
193
+ function assertMaskKeysInShape(op, mask, shape) {
194
+ const unknown = Object.keys(mask).filter((k) => !(k in shape));
195
+ if (unknown.length > 0) {
196
+ throw new Error(`ObjectSchema.${op}: key${unknown.length === 1 ? "" : "s"} ${formatKeys(unknown)} ${unknown.length === 1 ? "does" : "do"} not exist in base shape.`);
197
+ }
198
+ }
199
+ /**
200
+ * Construct a composed ObjectSchema. Decision #11: drops all top-level
201
+ * metadata so consumers re-tag explicitly via `.id()` / `.version()` /
202
+ * `.describe()`.
203
+ */
204
+ function composedObject(shape, unknownKeys) {
205
+ const fields = {};
206
+ for (const key of Object.keys(shape)) {
207
+ fields[key] = shape[key].node;
208
+ }
209
+ const node = {
210
+ kind: "object",
211
+ fields,
212
+ unknownKeys,
213
+ };
214
+ return new ObjectSchema(shape, node);
215
+ }
216
+ // ===========================================================================
217
+ // Field-level mutators for partial / required (operate on an AnySchema
218
+ // instance by producing a new instance with adjusted modifiers + node).
219
+ // ===========================================================================
220
+ /**
221
+ * Build a partial version of a field: sets optional, strips default.
222
+ * Reaches in via the field's `node` and a new clone with adjusted modifiers.
223
+ * The underlying Schema subclass's `clone` builds the correct instance type.
224
+ */
225
+ function makePartial(field) {
226
+ const oldMods = field.node.modifiers ?? {};
227
+ // Strip default; set optional (always true for partial).
228
+ const newMods = {
229
+ ...oldMods,
230
+ optional: true,
231
+ };
232
+ delete newMods.default;
233
+ // Use the type-system escape hatch: clone is protected, but we own the
234
+ // composition flow and need to reach in to swap modifiers cleanly.
235
+ const newNode = withModifiers(field.node, newMods);
236
+ return cloneField(field, newNode);
237
+ }
238
+ function makeRequired(field) {
239
+ const oldMods = field.node.modifiers ?? {};
240
+ const newMods = { ...oldMods };
241
+ delete newMods.optional;
242
+ delete newMods.default;
243
+ const newNode = withModifiers(field.node, newMods);
244
+ return cloneField(field, newNode);
245
+ }
246
+ function withModifiers(node, modifiers) {
247
+ const next = { ...node, modifiers };
248
+ // If the modifiers object is now empty, drop the key to match v0.1's
249
+ // "modifiers undefined when none set" convention. Keeps IR canonical.
250
+ if (Object.keys(modifiers).length === 0) {
251
+ delete next.modifiers;
252
+ }
253
+ return next;
254
+ }
255
+ /**
256
+ * Type-system gymnastic: Schema's `clone` is protected. We bridge via an
257
+ * exposed helper on Schema. (Defined as a static-ish utility colocated here
258
+ * to keep composition concerns visible in one place.)
259
+ */
260
+ function cloneField(field, node) {
261
+ return field.clone(node);
262
+ }
263
+ //# sourceMappingURL=object.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"object.js","sourceRoot":"","sources":["../../../src/builders/object.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import type { BooleanNode, EnumNode, JsonValue, LiteralNode, NumberNode, SchemaNode, StringNode } from "../ir/nodes.js";
2
+ import { Schema } from "./schema.js";
3
+ export declare class StringSchema extends Schema<string, string, "required", "required"> {
4
+ constructor(node?: StringNode);
5
+ protected clone(node: SchemaNode): this;
6
+ min(length: number): StringSchema;
7
+ max(length: number): StringSchema;
8
+ length(length: number): StringSchema;
9
+ regex(pattern: RegExp): StringSchema;
10
+ email(): StringSchema;
11
+ uuid(): StringSchema;
12
+ url(): StringSchema;
13
+ }
14
+ export declare class NumberSchema extends Schema<number, number, "required", "required"> {
15
+ constructor(node?: NumberNode);
16
+ protected clone(node: SchemaNode): this;
17
+ int(): NumberSchema;
18
+ min(value: number): NumberSchema;
19
+ max(value: number): NumberSchema;
20
+ gt(value: number): NumberSchema;
21
+ lt(value: number): NumberSchema;
22
+ multipleOf(value: number): NumberSchema;
23
+ }
24
+ export declare class BooleanSchema extends Schema<boolean, boolean, "required", "required"> {
25
+ constructor(node?: BooleanNode);
26
+ protected clone(node: SchemaNode): this;
27
+ }
28
+ export declare class LiteralSchema<T extends JsonValue> extends Schema<T, T, "required", "required"> {
29
+ constructor(node: LiteralNode<T>);
30
+ protected clone(node: SchemaNode): this;
31
+ }
32
+ export declare class EnumSchema<T extends string | number> extends Schema<T, T, "required", "required"> {
33
+ constructor(node: EnumNode<T>);
34
+ protected clone(node: SchemaNode): this;
35
+ get values(): readonly T[];
36
+ }
37
+ //# sourceMappingURL=primitives.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"primitives.d.ts","sourceRoot":"","sources":["../../../src/builders/primitives.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,QAAQ,EACR,SAAS,EACT,WAAW,EACX,UAAU,EACV,UAAU,EACV,UAAU,EACX,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAIrC,qBAAa,YAAa,SAAQ,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,CAAC;gBAClE,IAAI,GAAE,UAA+B;IAIjD,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAIvC,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY;IAQjC,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY;IAQjC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY;IAQpC,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY;IAQpC,KAAK,IAAI,YAAY;IAIrB,IAAI,IAAI,YAAY;IAIpB,GAAG,IAAI,YAAY;CAGpB;AAID,qBAAa,YAAa,SAAQ,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,CAAC;gBAClE,IAAI,GAAE,UAA+B;IAIjD,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAIvC,GAAG,IAAI,YAAY;IAInB,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY;IAQhC,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY;IAQhC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY;IAQ/B,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY;IAQ/B,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY;CAOxC;AAID,qBAAa,aAAc,SAAQ,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,CAAC;gBACrE,IAAI,GAAE,WAAiC;IAInD,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;CAGxC;AAID,qBAAa,aAAa,CAAC,CAAC,SAAS,SAAS,CAAE,SAAQ,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,UAAU,CAAC;gBAC9E,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC;IAIhC,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;CAGxC;AAID,qBAAa,UAAU,CACrB,CAAC,SAAS,MAAM,GAAG,MAAM,CACzB,SAAQ,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,UAAU,CAAC;gBAChC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;IAI7B,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAIvC,IAAI,MAAM,IAAI,SAAS,CAAC,EAAE,CAEzB;CACF"}
@@ -0,0 +1,125 @@
1
+ import { Schema } from "./schema.js";
2
+ // ---------- string ----------
3
+ export class StringSchema extends Schema {
4
+ constructor(node = { kind: "string" }) {
5
+ super(node);
6
+ }
7
+ clone(node) {
8
+ return new StringSchema(node);
9
+ }
10
+ min(length) {
11
+ return this.withRefinement({
12
+ kind: "portable",
13
+ name: "minLength",
14
+ params: { value: length },
15
+ });
16
+ }
17
+ max(length) {
18
+ return this.withRefinement({
19
+ kind: "portable",
20
+ name: "maxLength",
21
+ params: { value: length },
22
+ });
23
+ }
24
+ length(length) {
25
+ return this.withRefinement({
26
+ kind: "portable",
27
+ name: "length",
28
+ params: { value: length },
29
+ });
30
+ }
31
+ regex(pattern) {
32
+ return this.withRefinement({
33
+ kind: "portable",
34
+ name: "regex",
35
+ params: { source: pattern.source, flags: pattern.flags },
36
+ });
37
+ }
38
+ email() {
39
+ return this.withRefinement({ kind: "portable", name: "email" });
40
+ }
41
+ uuid() {
42
+ return this.withRefinement({ kind: "portable", name: "uuid" });
43
+ }
44
+ url() {
45
+ return this.withRefinement({ kind: "portable", name: "url" });
46
+ }
47
+ }
48
+ // ---------- number ----------
49
+ export class NumberSchema extends Schema {
50
+ constructor(node = { kind: "number" }) {
51
+ super(node);
52
+ }
53
+ clone(node) {
54
+ return new NumberSchema(node);
55
+ }
56
+ int() {
57
+ return this.withRefinement({ kind: "portable", name: "int" });
58
+ }
59
+ min(value) {
60
+ return this.withRefinement({
61
+ kind: "portable",
62
+ name: "min",
63
+ params: { value },
64
+ });
65
+ }
66
+ max(value) {
67
+ return this.withRefinement({
68
+ kind: "portable",
69
+ name: "max",
70
+ params: { value },
71
+ });
72
+ }
73
+ gt(value) {
74
+ return this.withRefinement({
75
+ kind: "portable",
76
+ name: "gt",
77
+ params: { value },
78
+ });
79
+ }
80
+ lt(value) {
81
+ return this.withRefinement({
82
+ kind: "portable",
83
+ name: "lt",
84
+ params: { value },
85
+ });
86
+ }
87
+ multipleOf(value) {
88
+ return this.withRefinement({
89
+ kind: "portable",
90
+ name: "multipleOf",
91
+ params: { value },
92
+ });
93
+ }
94
+ }
95
+ // ---------- boolean ----------
96
+ export class BooleanSchema extends Schema {
97
+ constructor(node = { kind: "boolean" }) {
98
+ super(node);
99
+ }
100
+ clone(node) {
101
+ return new BooleanSchema(node);
102
+ }
103
+ }
104
+ // ---------- literal ----------
105
+ export class LiteralSchema extends Schema {
106
+ constructor(node) {
107
+ super(node);
108
+ }
109
+ clone(node) {
110
+ return new LiteralSchema(node);
111
+ }
112
+ }
113
+ // ---------- enum ----------
114
+ export class EnumSchema extends Schema {
115
+ constructor(node) {
116
+ super(node);
117
+ }
118
+ clone(node) {
119
+ return new EnumSchema(node);
120
+ }
121
+ get values() {
122
+ return this.node.values;
123
+ }
124
+ }
125
+ //# sourceMappingURL=primitives.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"primitives.js","sourceRoot":"","sources":["../../../src/builders/primitives.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type { JsonValue } from "../ir/nodes.js";
2
+ import { ArraySchema } from "./array.js";
3
+ import { ObjectSchema } from "./object.js";
4
+ import { BooleanSchema, EnumSchema, LiteralSchema, NumberSchema, StringSchema } from "./primitives.js";
5
+ import type { AnySchema } from "./schema.js";
6
+ import type { Infer as InferType, Input as InputType, Output as OutputType, RawShape } from "../types.js";
7
+ /**
8
+ * The `s` namespace is the public DSL surface. Builders produce IR; type
9
+ * helpers (`s.infer`, `s.input`, `s.output`) extract static types. Keep the
10
+ * runtime and type sides aligned — adding a new builder requires no type
11
+ * helper change, but the existence of new IR node kinds may require it.
12
+ */
13
+ export declare const s: {
14
+ string(): StringSchema;
15
+ number(): NumberSchema;
16
+ boolean(): BooleanSchema;
17
+ literal<T extends JsonValue>(value: T): LiteralSchema<T>;
18
+ enum<T extends readonly [string, ...string[]] | readonly [number, ...number[]]>(values: T): EnumSchema<T[number]>;
19
+ array<E extends AnySchema>(element: E): ArraySchema<E>;
20
+ object<S extends RawShape>(shape: S): ObjectSchema<S>;
21
+ };
22
+ export declare namespace s {
23
+ type infer<T> = InferType<T>;
24
+ type input<T> = InputType<T>;
25
+ type output<T> = OutputType<T>;
26
+ }
27
+ //# sourceMappingURL=s.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"s.d.ts","sourceRoot":"","sources":["../../../src/builders/s.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EACL,aAAa,EACb,UAAU,EACV,aAAa,EACb,YAAY,EACZ,YAAY,EACb,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EACV,KAAK,IAAI,SAAS,EAClB,KAAK,IAAI,SAAS,EAClB,MAAM,IAAI,UAAU,EACpB,QAAQ,EACT,MAAM,aAAa,CAAC;AAErB;;;;;GAKG;AACH,eAAO,MAAM,CAAC;cACF,YAAY;cAIZ,YAAY;eAIX,aAAa;YAIhB,CAAC,SAAS,SAAS,SAAS,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC;SAInD,CAAC,SAAS,SAAS,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,UACpE,CAAC,GACR,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;UAUlB,CAAC,SAAS,SAAS,WAAW,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC;WAI/C,CAAC,SAAS,QAAQ,SAAS,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC;CAGtD,CAAC;AAMF,yBAAiB,CAAC,CAAC;IACjB,KAAY,KAAK,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC;IACpC,KAAY,KAAK,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC;IACpC,KAAY,MAAM,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;CACvC"}
@@ -0,0 +1,39 @@
1
+ import { ArraySchema } from "./array.js";
2
+ import { ObjectSchema } from "./object.js";
3
+ import { BooleanSchema, EnumSchema, LiteralSchema, NumberSchema, StringSchema, } from "./primitives.js";
4
+ /**
5
+ * The `s` namespace is the public DSL surface. Builders produce IR; type
6
+ * helpers (`s.infer`, `s.input`, `s.output`) extract static types. Keep the
7
+ * runtime and type sides aligned — adding a new builder requires no type
8
+ * helper change, but the existence of new IR node kinds may require it.
9
+ */
10
+ export const s = {
11
+ string() {
12
+ return new StringSchema();
13
+ },
14
+ number() {
15
+ return new NumberSchema();
16
+ },
17
+ boolean() {
18
+ return new BooleanSchema();
19
+ },
20
+ literal(value) {
21
+ return new LiteralSchema({ kind: "literal", value });
22
+ },
23
+ enum(values) {
24
+ if (values.length === 0) {
25
+ throw new Error("s.enum() requires at least one value");
26
+ }
27
+ return new EnumSchema({
28
+ kind: "enum",
29
+ values: values,
30
+ });
31
+ },
32
+ array(element) {
33
+ return new ArraySchema(element);
34
+ },
35
+ object(shape) {
36
+ return new ObjectSchema(shape);
37
+ },
38
+ };
39
+ //# sourceMappingURL=s.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"s.js","sourceRoot":"","sources":["../../../src/builders/s.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EACL,aAAa,EACb,UAAU,EACV,aAAa,EACb,YAAY,EACZ,YAAY,GACb,MAAM,iBAAiB,CAAC;AASzB;;;;;GAKG;AACH,MAAM,CAAC,MAAM,CAAC,GAAG;IACf,MAAM;QACJ,OAAO,IAAI,YAAY,EAAE,CAAC;IAC5B,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,YAAY,EAAE,CAAC;IAC5B,CAAC;IAED,OAAO;QACL,OAAO,IAAI,aAAa,EAAE,CAAC;IAC7B,CAAC;IAED,OAAO,CAAsB,KAAQ;QACnC,OAAO,IAAI,aAAa,CAAI,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,IAAI,CACF,MAAS;QAET,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC1D,CAAC;QACD,OAAO,IAAI,UAAU,CAAY;YAC/B,IAAI,EAAE,MAAM;YACZ,MAAM,EAAE,MAA8B;SACvC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAsB,OAAU;QACnC,OAAO,IAAI,WAAW,CAAI,OAAO,CAAC,CAAC;IACrC,CAAC;IAED,MAAM,CAAqB,KAAQ;QACjC,OAAO,IAAI,YAAY,CAAI,KAAK,CAAC,CAAC;IACpC,CAAC;CACF,CAAC"}