@xschemadev/core 0.0.6 → 0.2.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 (69) hide show
  1. package/dist/cli.d.ts +1 -1
  2. package/dist/cli.js +1 -1
  3. package/dist/index.d.ts +5 -1
  4. package/dist/index.d.ts.map +1 -1
  5. package/dist/index.js +10 -0
  6. package/dist/index.js.map +1 -1
  7. package/dist/ir/constraints.d.ts +52 -0
  8. package/dist/ir/constraints.d.ts.map +1 -0
  9. package/dist/ir/constraints.js +6 -0
  10. package/dist/ir/constraints.js.map +1 -0
  11. package/dist/ir/index.d.ts +9 -0
  12. package/dist/ir/index.d.ts.map +1 -0
  13. package/dist/ir/index.js +8 -0
  14. package/dist/ir/index.js.map +1 -0
  15. package/dist/ir/nodes.d.ts +157 -0
  16. package/dist/ir/nodes.d.ts.map +1 -0
  17. package/dist/ir/nodes.js +11 -0
  18. package/dist/ir/nodes.js.map +1 -0
  19. package/dist/parser/collections.d.ts +11 -0
  20. package/dist/parser/collections.d.ts.map +1 -0
  21. package/dist/parser/collections.js +219 -0
  22. package/dist/parser/collections.js.map +1 -0
  23. package/dist/parser/composition.d.ts +14 -0
  24. package/dist/parser/composition.d.ts.map +1 -0
  25. package/dist/parser/composition.js +36 -0
  26. package/dist/parser/composition.js.map +1 -0
  27. package/dist/parser/context.d.ts +12 -0
  28. package/dist/parser/context.d.ts.map +1 -0
  29. package/dist/parser/context.js +10 -0
  30. package/dist/parser/context.js.map +1 -0
  31. package/dist/parser/index.d.ts +19 -0
  32. package/dist/parser/index.d.ts.map +1 -0
  33. package/dist/parser/index.js +325 -0
  34. package/dist/parser/index.js.map +1 -0
  35. package/dist/parser/primitives.d.ts +8 -0
  36. package/dist/parser/primitives.d.ts.map +1 -0
  37. package/dist/parser/primitives.js +28 -0
  38. package/dist/parser/primitives.js.map +1 -0
  39. package/dist/parser/values.d.ts +8 -0
  40. package/dist/parser/values.d.ts.map +1 -0
  41. package/dist/parser/values.js +16 -0
  42. package/dist/parser/values.js.map +1 -0
  43. package/dist/schema/index.d.ts +5 -0
  44. package/dist/schema/index.d.ts.map +1 -0
  45. package/dist/schema/index.js +5 -0
  46. package/dist/schema/index.js.map +1 -0
  47. package/dist/schema/json-schema.d.ts +66 -0
  48. package/dist/schema/json-schema.d.ts.map +1 -0
  49. package/dist/schema/json-schema.js +6 -0
  50. package/dist/schema/json-schema.js.map +1 -0
  51. package/dist/types.d.ts +6 -7
  52. package/dist/types.d.ts.map +1 -1
  53. package/dist/utils/code-builder.d.ts +49 -0
  54. package/dist/utils/code-builder.d.ts.map +1 -0
  55. package/dist/utils/code-builder.js +112 -0
  56. package/dist/utils/code-builder.js.map +1 -0
  57. package/dist/utils/index.d.ts +7 -0
  58. package/dist/utils/index.d.ts.map +1 -0
  59. package/dist/utils/index.js +7 -0
  60. package/dist/utils/index.js.map +1 -0
  61. package/dist/utils/json-pointer.d.ts +14 -0
  62. package/dist/utils/json-pointer.d.ts.map +1 -0
  63. package/dist/utils/json-pointer.js +17 -0
  64. package/dist/utils/json-pointer.js.map +1 -0
  65. package/dist/utils/primitives.d.ts +28 -0
  66. package/dist/utils/primitives.d.ts.map +1 -0
  67. package/dist/utils/primitives.js +57 -0
  68. package/dist/utils/primitives.js.map +1 -0
  69. package/package.json +3 -2
package/dist/cli.d.ts CHANGED
@@ -4,7 +4,7 @@ import type { ConvertInput, ConvertResult } from "./types.js";
4
4
  * Reads JSON array of ConvertInput from stdin, calls convert for each, outputs JSON array of ConvertResult.
5
5
  *
6
6
  * @example
7
- * ```ts
7
+ * ```typescript
8
8
  * #!/usr/bin/env node
9
9
  * import { createAdapterCLI } from "@xschemadev/core";
10
10
  * import { convert } from "./index";
package/dist/cli.js CHANGED
@@ -3,7 +3,7 @@
3
3
  * Reads JSON array of ConvertInput from stdin, calls convert for each, outputs JSON array of ConvertResult.
4
4
  *
5
5
  * @example
6
- * ```ts
6
+ * ```typescript
7
7
  * #!/usr/bin/env node
8
8
  * import { createAdapterCLI } from "@xschemadev/core";
9
9
  * import { convert } from "./index";
package/dist/index.d.ts CHANGED
@@ -1,3 +1,7 @@
1
- export type { XSchemaAdapter, ConvertInput, ConvertResult } from "./types.js";
1
+ export type { ConvertInput, ConvertResult } from "./types.js";
2
2
  export { createAdapterCLI } from "./cli.js";
3
+ export type { JSONSchema } from "./schema/index.js";
4
+ export type { SchemaNode, NodeKind, NodeOfKind, StringNode, NumberNode, BooleanNode, NullNode, ObjectNode, ArrayNode, TupleNode, UnionNode, IntersectionNode, OneOfNode, NotNode, LiteralNode, EnumNode, AnyNode, NeverNode, RefNode, ConditionalNode, TypeGuardedNode, NullableNode, TypeGuard, TypeCheck, StringConstraints, NumberConstraints, ArrayConstraints, ContainsConstraint, PropertyDef, PatternPropertyDef, Dependency, PropertyDependency, SchemaDependency, } from "./ir/index.js";
5
+ export { parse, parseSchema, type ParseContext } from "./parser/index.js";
6
+ export { isPrimitive, escapeString, isEmptyObject, getOwnProperty, PROTOTYPE_PROPERTY_NAMES, hasPrototypeProperties, getRefName, chain, buildUnion, buildIntersection, buildSuperRefine, buildRefine, buildLiteral, buildSafeParseCheck, buildPropertyCheck, sortedStringify, DEEP_SORTED_STRINGIFY_RUNTIME, } from "./utils/index.js";
3
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAG5C,YAAY,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAGpD,YAAY,EAEV,UAAU,EACV,QAAQ,EACR,UAAU,EAGV,UAAU,EACV,UAAU,EACV,WAAW,EACX,QAAQ,EACR,UAAU,EACV,SAAS,EACT,SAAS,EACT,SAAS,EACT,gBAAgB,EAChB,SAAS,EACT,OAAO,EACP,WAAW,EACX,QAAQ,EACR,OAAO,EACP,SAAS,EACT,OAAO,EAEP,eAAe,EACf,eAAe,EACf,YAAY,EACZ,SAAS,EACT,SAAS,EAGT,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,WAAW,EACX,kBAAkB,EAClB,UAAU,EACV,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAG1E,OAAO,EAEL,WAAW,EACX,YAAY,EACZ,aAAa,EACb,cAAc,EACd,wBAAwB,EACxB,sBAAsB,EAGtB,UAAU,EAGV,KAAK,EACL,UAAU,EACV,iBAAiB,EACjB,gBAAgB,EAChB,WAAW,EACX,YAAY,EACZ,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,6BAA6B,GAC9B,MAAM,kBAAkB,CAAC"}
package/dist/index.js CHANGED
@@ -1,2 +1,12 @@
1
1
  export { createAdapterCLI } from "./cli.js";
2
+ // Parser
3
+ export { parse, parseSchema } from "./parser/index.js";
4
+ // Utilities
5
+ export {
6
+ // Primitives
7
+ isPrimitive, escapeString, isEmptyObject, getOwnProperty, PROTOTYPE_PROPERTY_NAMES, hasPrototypeProperties,
8
+ // JSON Pointer
9
+ getRefName,
10
+ // Code builder
11
+ chain, buildUnion, buildIntersection, buildSuperRefine, buildRefine, buildLiteral, buildSafeParseCheck, buildPropertyCheck, sortedStringify, DEEP_SORTED_STRINGIFY_RUNTIME, } from "./utils/index.js";
2
12
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAgD5C,SAAS;AACT,OAAO,EAAE,KAAK,EAAE,WAAW,EAAqB,MAAM,mBAAmB,CAAC;AAE1E,YAAY;AACZ,OAAO;AACL,aAAa;AACb,WAAW,EACX,YAAY,EACZ,aAAa,EACb,cAAc,EACd,wBAAwB,EACxB,sBAAsB;AAEtB,eAAe;AACf,UAAU;AAEV,eAAe;AACf,KAAK,EACL,UAAU,EACV,iBAAiB,EACjB,gBAAgB,EAChB,WAAW,EACX,YAAY,EACZ,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,6BAA6B,GAC9B,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Constraint types for SchemaNode IR
3
+ * These represent the validation constraints extracted from JSON Schema
4
+ */
5
+ /** String validation constraints */
6
+ export interface StringConstraints {
7
+ minLength?: number;
8
+ maxLength?: number;
9
+ pattern?: string;
10
+ }
11
+ /** Number validation constraints */
12
+ export interface NumberConstraints {
13
+ minimum?: number;
14
+ maximum?: number;
15
+ exclusiveMinimum?: number;
16
+ exclusiveMaximum?: number;
17
+ multipleOf?: number;
18
+ }
19
+ /** Array validation constraints */
20
+ export interface ArrayConstraints {
21
+ minItems?: number;
22
+ maxItems?: number;
23
+ uniqueItems?: boolean;
24
+ contains?: ContainsConstraint;
25
+ }
26
+ /** Contains constraint for arrays */
27
+ export interface ContainsConstraint {
28
+ schema: unknown;
29
+ minContains: number;
30
+ maxContains?: number;
31
+ }
32
+ /** Property definition in an object */
33
+ export interface PropertyDef {
34
+ schema: unknown;
35
+ required: boolean;
36
+ }
37
+ /** Pattern property definition */
38
+ export interface PatternPropertyDef {
39
+ pattern: string;
40
+ schema: unknown;
41
+ }
42
+ /** Dependency types */
43
+ export interface PropertyDependency {
44
+ kind: "property";
45
+ requiredProperties: string[];
46
+ }
47
+ export interface SchemaDependency {
48
+ kind: "schema";
49
+ schema: unknown;
50
+ }
51
+ export type Dependency = PropertyDependency | SchemaDependency;
52
+ //# sourceMappingURL=constraints.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constraints.d.ts","sourceRoot":"","sources":["../../src/ir/constraints.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,oCAAoC;AACpC,MAAM,WAAW,iBAAiB;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,oCAAoC;AACpC,MAAM,WAAW,iBAAiB;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,mCAAmC;AACnC,MAAM,WAAW,gBAAgB;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,kBAAkB,CAAC;CAC9B;AAED,qCAAqC;AACrC,MAAM,WAAW,kBAAkB;IAClC,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,uCAAuC;AACvC,MAAM,WAAW,WAAW;IAC3B,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;CAClB;AAED,kCAAkC;AAClC,MAAM,WAAW,kBAAkB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;CAChB;AAED,uBAAuB;AACvB,MAAM,WAAW,kBAAkB;IAClC,IAAI,EAAE,UAAU,CAAC;IACjB,kBAAkB,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,gBAAgB;IAChC,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,MAAM,UAAU,GAAG,kBAAkB,GAAG,gBAAgB,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Constraint types for SchemaNode IR
3
+ * These represent the validation constraints extracted from JSON Schema
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=constraints.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constraints.js","sourceRoot":"","sources":["../../src/ir/constraints.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Intermediate Representation (IR) for JSON Schema
3
+ *
4
+ * This module exports the SchemaNode discriminated union and related types.
5
+ * Adapters use these types to implement their renderers.
6
+ */
7
+ export type { SchemaNode, NodeKind, NodeOfKind, StringNode, NumberNode, BooleanNode, NullNode, ObjectNode, ArrayNode, TupleNode, UnionNode, IntersectionNode, OneOfNode, NotNode, LiteralNode, EnumNode, AnyNode, NeverNode, RefNode, ConditionalNode, TypeGuardedNode, NullableNode, TypeGuard, TypeCheck, StringConstraints, NumberConstraints, ArrayConstraints, ContainsConstraint, PropertyDef, PatternPropertyDef, Dependency, } from "./nodes.js";
8
+ export type { PropertyDependency, SchemaDependency } from "./constraints.js";
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ir/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,YAAY,EAEX,UAAU,EACV,QAAQ,EACR,UAAU,EAGV,UAAU,EACV,UAAU,EACV,WAAW,EACX,QAAQ,EACR,UAAU,EACV,SAAS,EACT,SAAS,EACT,SAAS,EACT,gBAAgB,EAChB,SAAS,EACT,OAAO,EACP,WAAW,EACX,QAAQ,EACR,OAAO,EACP,SAAS,EACT,OAAO,EACP,eAAe,EACf,eAAe,EACf,YAAY,EACZ,SAAS,EACT,SAAS,EAGT,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,WAAW,EACX,kBAAkB,EAClB,UAAU,GACV,MAAM,YAAY,CAAC;AAEpB,YAAY,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Intermediate Representation (IR) for JSON Schema
3
+ *
4
+ * This module exports the SchemaNode discriminated union and related types.
5
+ * Adapters use these types to implement their renderers.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ir/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -0,0 +1,157 @@
1
+ /**
2
+ * SchemaNode - Intermediate Representation for JSON Schema
3
+ *
4
+ * A discriminated union representing all possible schema shapes.
5
+ * This IR is designed to be:
6
+ * 1. Exhaustively matchable via the `kind` discriminator
7
+ * 2. Language-agnostic within the TypeScript ecosystem
8
+ * 3. Renderer-friendly (contains all info needed for code generation)
9
+ */
10
+ import type { StringConstraints, NumberConstraints, ArrayConstraints, ContainsConstraint, PropertyDef, PatternPropertyDef, Dependency } from "./constraints.js";
11
+ export type { StringConstraints, NumberConstraints, ArrayConstraints, ContainsConstraint, PropertyDef, PatternPropertyDef, Dependency, };
12
+ /** String schema node */
13
+ export interface StringNode {
14
+ kind: "string";
15
+ constraints: StringConstraints;
16
+ format?: string;
17
+ }
18
+ /** Number schema node (includes integer) */
19
+ export interface NumberNode {
20
+ kind: "number";
21
+ constraints: NumberConstraints;
22
+ integer: boolean;
23
+ }
24
+ /** Boolean schema node */
25
+ export interface BooleanNode {
26
+ kind: "boolean";
27
+ }
28
+ /** Null schema node */
29
+ export interface NullNode {
30
+ kind: "null";
31
+ }
32
+ /** Object schema node */
33
+ export interface ObjectNode {
34
+ kind: "object";
35
+ properties: Map<string, PropertyDef>;
36
+ /**
37
+ * additionalProperties - undefined means not specified in schema.
38
+ * Explicitly true means additionalProperties: true was in schema (evaluates extra props).
39
+ * false means additionalProperties: false.
40
+ * SchemaNode means additionalProperties was a schema (evaluates and validates extra props).
41
+ */
42
+ additionalProperties?: SchemaNode | boolean;
43
+ patternProperties: PatternPropertyDef[];
44
+ propertyNames?: SchemaNode;
45
+ minProperties?: number;
46
+ maxProperties?: number;
47
+ dependencies: Map<string, Dependency>;
48
+ /**
49
+ * unevaluatedProperties - only valid for standalone use (no applicators).
50
+ * Go CLI blocks schemas with unevaluated+applicators, so adapters only see simple cases.
51
+ */
52
+ unevaluatedProperties?: SchemaNode | false;
53
+ }
54
+ /** Array schema node (homogeneous items) */
55
+ export interface ArrayNode {
56
+ kind: "array";
57
+ items: SchemaNode;
58
+ constraints: ArrayConstraints;
59
+ /**
60
+ * unevaluatedItems - only valid for standalone use (no applicators).
61
+ * Go CLI blocks schemas with unevaluated+applicators, so adapters only see simple cases.
62
+ */
63
+ unevaluatedItems?: SchemaNode | false;
64
+ }
65
+ /** Tuple schema node (positional items) */
66
+ export interface TupleNode {
67
+ kind: "tuple";
68
+ prefixItems: SchemaNode[];
69
+ restItems: SchemaNode | false;
70
+ constraints: ArrayConstraints;
71
+ /**
72
+ * unevaluatedItems - only valid for standalone use (no applicators).
73
+ * Go CLI blocks schemas with unevaluated+applicators, so adapters only see simple cases.
74
+ */
75
+ unevaluatedItems?: SchemaNode | false;
76
+ }
77
+ /** Union schema node (anyOf - at least one must match) */
78
+ export interface UnionNode {
79
+ kind: "union";
80
+ variants: SchemaNode[];
81
+ }
82
+ /** Intersection schema node (allOf - all must match) */
83
+ export interface IntersectionNode {
84
+ kind: "intersection";
85
+ schemas: SchemaNode[];
86
+ }
87
+ /** OneOf schema node (exactly one must match) */
88
+ export interface OneOfNode {
89
+ kind: "oneOf";
90
+ schemas: SchemaNode[];
91
+ }
92
+ /** Not schema node (must not match) */
93
+ export interface NotNode {
94
+ kind: "not";
95
+ schema: SchemaNode;
96
+ }
97
+ /** Literal schema node (const) */
98
+ export interface LiteralNode {
99
+ kind: "literal";
100
+ value: unknown;
101
+ }
102
+ /** Enum schema node */
103
+ export interface EnumNode {
104
+ kind: "enum";
105
+ values: unknown[];
106
+ }
107
+ /** Any schema node (accepts everything) */
108
+ export interface AnyNode {
109
+ kind: "any";
110
+ }
111
+ /** Never schema node (accepts nothing) */
112
+ export interface NeverNode {
113
+ kind: "never";
114
+ }
115
+ /** Reference schema node — recursive back-edge kept by the processor */
116
+ export interface RefNode {
117
+ kind: "ref";
118
+ ref: string;
119
+ }
120
+ /** Conditional schema node (if/then/else) */
121
+ export interface ConditionalNode {
122
+ kind: "conditional";
123
+ if: SchemaNode;
124
+ then?: SchemaNode;
125
+ else?: SchemaNode;
126
+ }
127
+ /**
128
+ * Type-guarded schema node
129
+ * Used when JSON Schema has type-specific keywords but no explicit type.
130
+ * The schema only applies when the value matches the type check.
131
+ */
132
+ export interface TypeGuardedNode {
133
+ kind: "typeGuarded";
134
+ guards: TypeGuard[];
135
+ }
136
+ export interface TypeGuard {
137
+ check: TypeCheck;
138
+ schema: SchemaNode;
139
+ }
140
+ export type TypeCheck = "object" | "array" | "string" | "number";
141
+ /**
142
+ * Nullable wrapper node
143
+ * Represents OpenAPI 3.0 nullable or union with null
144
+ */
145
+ export interface NullableNode {
146
+ kind: "nullable";
147
+ inner: SchemaNode;
148
+ }
149
+ /** The discriminated union of all schema nodes */
150
+ export type SchemaNode = StringNode | NumberNode | BooleanNode | NullNode | ObjectNode | ArrayNode | TupleNode | UnionNode | IntersectionNode | OneOfNode | NotNode | LiteralNode | EnumNode | AnyNode | NeverNode | RefNode | ConditionalNode | TypeGuardedNode | NullableNode;
151
+ /** Helper type to extract a specific node kind */
152
+ export type NodeOfKind<K extends SchemaNode["kind"]> = Extract<SchemaNode, {
153
+ kind: K;
154
+ }>;
155
+ /** All possible node kinds */
156
+ export type NodeKind = SchemaNode["kind"];
157
+ //# sourceMappingURL=nodes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nodes.d.ts","sourceRoot":"","sources":["../../src/ir/nodes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * SchemaNode - Intermediate Representation for JSON Schema
3
+ *
4
+ * A discriminated union representing all possible schema shapes.
5
+ * This IR is designed to be:
6
+ * 1. Exhaustively matchable via the `kind` discriminator
7
+ * 2. Language-agnostic within the TypeScript ecosystem
8
+ * 3. Renderer-friendly (contains all info needed for code generation)
9
+ */
10
+ export {};
11
+ //# sourceMappingURL=nodes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nodes.js","sourceRoot":"","sources":["../../src/ir/nodes.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Parsers for collection types: object, array, tuple
3
+ */
4
+ import type { JSONSchema } from "../schema/json-schema.js";
5
+ import type { ObjectNode, ArrayNode, TupleNode, SchemaNode } from "../ir/nodes.js";
6
+ import { type ParseContext } from "./context.js";
7
+ type ParseSchemaFn = (schema: JSONSchema | boolean, ctx: ParseContext) => SchemaNode;
8
+ export declare function parseObject(schema: JSONSchema, ctx: ParseContext, parseSchema: ParseSchemaFn): ObjectNode;
9
+ export declare function parseArray(schema: JSONSchema, ctx: ParseContext, parseSchema: ParseSchemaFn): ArrayNode | TupleNode;
10
+ export {};
11
+ //# sourceMappingURL=collections.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collections.d.ts","sourceRoot":"","sources":["../../src/parser/collections.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,KAAK,EACX,UAAU,EACV,SAAS,EACT,SAAS,EACT,UAAU,EAKV,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,KAAK,aAAa,GAAG,CACpB,MAAM,EAAE,UAAU,GAAG,OAAO,EAC5B,GAAG,EAAE,YAAY,KACb,UAAU,CAAC;AAEhB,wBAAgB,WAAW,CAC1B,MAAM,EAAE,UAAU,EAClB,GAAG,EAAE,YAAY,EACjB,WAAW,EAAE,aAAa,GACxB,UAAU,CAqIZ;AAED,wBAAgB,UAAU,CACzB,MAAM,EAAE,UAAU,EAClB,GAAG,EAAE,YAAY,EACjB,WAAW,EAAE,aAAa,GACxB,SAAS,GAAG,SAAS,CAkCvB"}
@@ -0,0 +1,219 @@
1
+ /**
2
+ * Parsers for collection types: object, array, tuple
3
+ */
4
+ export function parseObject(schema, ctx, parseSchema) {
5
+ const properties = new Map();
6
+ const requiredSet = new Set();
7
+ // Collect required properties
8
+ if (Array.isArray(schema.required)) {
9
+ for (const key of schema.required) {
10
+ requiredSet.add(key);
11
+ }
12
+ }
13
+ // Draft3 style: check for required: true on individual properties
14
+ const schemaProps = schema.properties || {};
15
+ for (const [key, propSchema] of Object.entries(schemaProps)) {
16
+ if (propSchema &&
17
+ typeof propSchema === "object" &&
18
+ propSchema.required === true) {
19
+ requiredSet.add(key);
20
+ }
21
+ }
22
+ // Parse properties
23
+ for (const key of Object.getOwnPropertyNames(schemaProps)) {
24
+ const propSchema = schemaProps[key];
25
+ if (propSchema === undefined)
26
+ continue;
27
+ properties.set(key, {
28
+ schema: parseSchema(propSchema, ctx),
29
+ required: requiredSet.has(key),
30
+ });
31
+ }
32
+ // Add required properties that don't have schemas (must exist, any type)
33
+ for (const key of requiredSet) {
34
+ if (!properties.has(key)) {
35
+ properties.set(key, {
36
+ schema: { kind: "any" },
37
+ required: true,
38
+ });
39
+ }
40
+ }
41
+ // Parse pattern properties
42
+ const patternProperties = [];
43
+ if (schema.patternProperties) {
44
+ for (const [pattern, patternSchema] of Object.entries(schema.patternProperties)) {
45
+ patternProperties.push({
46
+ pattern,
47
+ schema: parseSchema(patternSchema, ctx),
48
+ });
49
+ }
50
+ }
51
+ // Parse additionalProperties
52
+ // Keep track of whether it was explicitly set to true vs not specified
53
+ let additionalProperties;
54
+ if (schema.additionalProperties === false) {
55
+ additionalProperties = false;
56
+ }
57
+ else if (schema.additionalProperties === true) {
58
+ additionalProperties = true; // Explicitly true
59
+ }
60
+ else if (schema.additionalProperties &&
61
+ typeof schema.additionalProperties === "object") {
62
+ additionalProperties = parseSchema(schema.additionalProperties, ctx);
63
+ }
64
+ // If not specified, leave as undefined (not defaulting to true)
65
+ // Parse propertyNames
66
+ const propertyNames = schema.propertyNames !== undefined
67
+ ? parseSchema(schema.propertyNames, ctx)
68
+ : undefined;
69
+ // Parse dependencies
70
+ const dependencies = new Map();
71
+ // Handle dependentRequired
72
+ if (schema.dependentRequired) {
73
+ for (const [prop, deps] of Object.entries(schema.dependentRequired)) {
74
+ dependencies.set(prop, {
75
+ kind: "property",
76
+ requiredProperties: deps,
77
+ });
78
+ }
79
+ }
80
+ // Handle dependentSchemas
81
+ if (schema.dependentSchemas) {
82
+ for (const [prop, depSchema] of Object.entries(schema.dependentSchemas)) {
83
+ dependencies.set(prop, {
84
+ kind: "schema",
85
+ schema: parseSchema(depSchema, ctx),
86
+ });
87
+ }
88
+ }
89
+ // Note: legacy dependencies should be normalized by the Go CLI to draft2020-12 format
90
+ // (dependentRequired for property deps, dependentSchemas for schema deps).
91
+ // If we encounter the legacy 'dependencies' keyword, it indicates incomplete bundling.
92
+ if (schema.dependencies) {
93
+ throw new Error(`Encountered legacy 'dependencies' keyword - schemas must be normalized to draft2020-12 by the Go CLI. ` +
94
+ `Run the schema through xschema generate to normalize the format.`);
95
+ }
96
+ // Parse unevaluatedProperties (only valid for standalone use - Go CLI blocks applicator combinations)
97
+ let unevaluatedProperties;
98
+ if (schema.unevaluatedProperties === false) {
99
+ unevaluatedProperties = false;
100
+ }
101
+ else if (schema.unevaluatedProperties !== undefined &&
102
+ typeof schema.unevaluatedProperties === "object") {
103
+ unevaluatedProperties = parseSchema(schema.unevaluatedProperties, ctx);
104
+ }
105
+ return {
106
+ kind: "object",
107
+ properties,
108
+ additionalProperties,
109
+ patternProperties,
110
+ propertyNames,
111
+ minProperties: schema.minProperties,
112
+ maxProperties: schema.maxProperties,
113
+ dependencies,
114
+ unevaluatedProperties,
115
+ };
116
+ }
117
+ export function parseArray(schema, ctx, parseSchema) {
118
+ const prefixItems = schema.prefixItems;
119
+ const items = schema.items;
120
+ // Check for tuple (prefixItems or items as array)
121
+ if (prefixItems && Array.isArray(prefixItems)) {
122
+ return parseTuple(schema, ctx, parseSchema);
123
+ }
124
+ if (Array.isArray(items)) {
125
+ return parseTupleFromItems(schema, ctx, parseSchema);
126
+ }
127
+ // Regular array
128
+ let itemSchema = { kind: "any" };
129
+ if (items && typeof items === "object") {
130
+ itemSchema = parseSchema(items, ctx);
131
+ }
132
+ else if (items === false) {
133
+ // items: false means empty tuple only
134
+ return {
135
+ kind: "tuple",
136
+ prefixItems: [],
137
+ restItems: false,
138
+ constraints: buildArrayConstraints(schema, ctx, parseSchema),
139
+ unevaluatedItems: parseUnevaluatedItems(schema, ctx, parseSchema),
140
+ };
141
+ }
142
+ return {
143
+ kind: "array",
144
+ items: itemSchema,
145
+ constraints: buildArrayConstraints(schema, ctx, parseSchema),
146
+ unevaluatedItems: parseUnevaluatedItems(schema, ctx, parseSchema),
147
+ };
148
+ }
149
+ function parseTuple(schema, ctx, parseSchema) {
150
+ const prefixItems = schema.prefixItems;
151
+ const items = schema.items;
152
+ const additionalItems = schema.additionalItems;
153
+ const parsedPrefixItems = prefixItems.map((item) => parseSchema(item, ctx));
154
+ // Determine rest items
155
+ let restItems = { kind: "any" };
156
+ if (items === false || additionalItems === false) {
157
+ restItems = false;
158
+ }
159
+ else if (items && typeof items === "object" && !Array.isArray(items)) {
160
+ restItems = parseSchema(items, ctx);
161
+ }
162
+ else if (additionalItems && typeof additionalItems === "object") {
163
+ restItems = parseSchema(additionalItems, ctx);
164
+ }
165
+ return {
166
+ kind: "tuple",
167
+ prefixItems: parsedPrefixItems,
168
+ restItems,
169
+ constraints: buildArrayConstraints(schema, ctx, parseSchema),
170
+ unevaluatedItems: parseUnevaluatedItems(schema, ctx, parseSchema),
171
+ };
172
+ }
173
+ function parseTupleFromItems(schema, ctx, parseSchema) {
174
+ const items = schema.items;
175
+ const additionalItems = schema.additionalItems;
176
+ const parsedItems = items.map((item) => parseSchema(item, ctx));
177
+ // Determine rest items
178
+ let restItems = { kind: "any" };
179
+ if (additionalItems === false) {
180
+ restItems = false;
181
+ }
182
+ else if (additionalItems && typeof additionalItems === "object") {
183
+ restItems = parseSchema(additionalItems, ctx);
184
+ }
185
+ return {
186
+ kind: "tuple",
187
+ prefixItems: parsedItems,
188
+ restItems,
189
+ constraints: buildArrayConstraints(schema, ctx, parseSchema),
190
+ unevaluatedItems: parseUnevaluatedItems(schema, ctx, parseSchema),
191
+ };
192
+ }
193
+ function buildArrayConstraints(schema, ctx, parseSchema) {
194
+ let contains;
195
+ if (schema.contains !== undefined) {
196
+ contains = {
197
+ schema: parseSchema(schema.contains, ctx),
198
+ minContains: schema.minContains ?? 1,
199
+ maxContains: schema.maxContains,
200
+ };
201
+ }
202
+ return {
203
+ minItems: schema.minItems,
204
+ maxItems: schema.maxItems,
205
+ uniqueItems: schema.uniqueItems,
206
+ contains,
207
+ };
208
+ }
209
+ function parseUnevaluatedItems(schema, ctx, parseSchema) {
210
+ if (schema.unevaluatedItems === false) {
211
+ return false;
212
+ }
213
+ if (schema.unevaluatedItems !== undefined &&
214
+ typeof schema.unevaluatedItems === "object") {
215
+ return parseSchema(schema.unevaluatedItems, ctx);
216
+ }
217
+ return undefined;
218
+ }
219
+ //# sourceMappingURL=collections.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collections.js","sourceRoot":"","sources":["../../src/parser/collections.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Parsers for composition types: allOf, anyOf, oneOf, not
3
+ */
4
+ import type { JSONSchema } from "../schema/json-schema.js";
5
+ import type { IntersectionNode, UnionNode, OneOfNode, NotNode, ConditionalNode, SchemaNode } from "../ir/nodes.js";
6
+ import type { ParseContext } from "./context.js";
7
+ type ParseSchemaFn = (schema: JSONSchema | boolean, ctx: ParseContext) => SchemaNode;
8
+ export declare function parseAllOf(schemas: (JSONSchema | boolean)[], ctx: ParseContext, parseSchema: ParseSchemaFn): IntersectionNode;
9
+ export declare function parseAnyOf(schemas: (JSONSchema | boolean)[], ctx: ParseContext, parseSchema: ParseSchemaFn): UnionNode;
10
+ export declare function parseOneOf(schemas: (JSONSchema | boolean)[], ctx: ParseContext, parseSchema: ParseSchemaFn): OneOfNode;
11
+ export declare function parseNot(schema: JSONSchema | boolean, ctx: ParseContext, parseSchema: ParseSchemaFn): NotNode;
12
+ export declare function parseConditional(schema: JSONSchema, ctx: ParseContext, parseSchema: ParseSchemaFn): ConditionalNode;
13
+ export {};
14
+ //# sourceMappingURL=composition.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"composition.d.ts","sourceRoot":"","sources":["../../src/parser/composition.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,KAAK,EACX,gBAAgB,EAChB,SAAS,EACT,SAAS,EACT,OAAO,EACP,eAAe,EACf,UAAU,EACV,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,KAAK,aAAa,GAAG,CACpB,MAAM,EAAE,UAAU,GAAG,OAAO,EAC5B,GAAG,EAAE,YAAY,KACb,UAAU,CAAC;AAEhB,wBAAgB,UAAU,CACzB,OAAO,EAAE,CAAC,UAAU,GAAG,OAAO,CAAC,EAAE,EACjC,GAAG,EAAE,YAAY,EACjB,WAAW,EAAE,aAAa,GACxB,gBAAgB,CAKlB;AAED,wBAAgB,UAAU,CACzB,OAAO,EAAE,CAAC,UAAU,GAAG,OAAO,CAAC,EAAE,EACjC,GAAG,EAAE,YAAY,EACjB,WAAW,EAAE,aAAa,GACxB,SAAS,CAKX;AAED,wBAAgB,UAAU,CACzB,OAAO,EAAE,CAAC,UAAU,GAAG,OAAO,CAAC,EAAE,EACjC,GAAG,EAAE,YAAY,EACjB,WAAW,EAAE,aAAa,GACxB,SAAS,CAKX;AAED,wBAAgB,QAAQ,CACvB,MAAM,EAAE,UAAU,GAAG,OAAO,EAC5B,GAAG,EAAE,YAAY,EACjB,WAAW,EAAE,aAAa,GACxB,OAAO,CAKT;AAED,wBAAgB,gBAAgB,CAC/B,MAAM,EAAE,UAAU,EAClB,GAAG,EAAE,YAAY,EACjB,WAAW,EAAE,aAAa,GACxB,eAAe,CASjB"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Parsers for composition types: allOf, anyOf, oneOf, not
3
+ */
4
+ export function parseAllOf(schemas, ctx, parseSchema) {
5
+ return {
6
+ kind: "intersection",
7
+ schemas: schemas.map((s) => parseSchema(s, ctx)),
8
+ };
9
+ }
10
+ export function parseAnyOf(schemas, ctx, parseSchema) {
11
+ return {
12
+ kind: "union",
13
+ variants: schemas.map((s) => parseSchema(s, ctx)),
14
+ };
15
+ }
16
+ export function parseOneOf(schemas, ctx, parseSchema) {
17
+ return {
18
+ kind: "oneOf",
19
+ schemas: schemas.map((s) => parseSchema(s, ctx)),
20
+ };
21
+ }
22
+ export function parseNot(schema, ctx, parseSchema) {
23
+ return {
24
+ kind: "not",
25
+ schema: parseSchema(schema, ctx),
26
+ };
27
+ }
28
+ export function parseConditional(schema, ctx, parseSchema) {
29
+ return {
30
+ kind: "conditional",
31
+ if: parseSchema(schema.if, ctx),
32
+ then: schema.then !== undefined ? parseSchema(schema.then, ctx) : undefined,
33
+ else: schema.else !== undefined ? parseSchema(schema.else, ctx) : undefined,
34
+ };
35
+ }
36
+ //# sourceMappingURL=composition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"composition.js","sourceRoot":"","sources":["../../src/parser/composition.ts"],"names":[],"mappings":"AAAA;;GAEG;AAkBH,MAAM,UAAU,UAAU,CACzB,OAAiC,EACjC,GAAiB,EACjB,WAA0B;IAE1B,OAAO;QACN,IAAI,EAAE,cAAc;QACpB,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;KAChD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CACzB,OAAiC,EACjC,GAAiB,EACjB,WAA0B;IAE1B,OAAO;QACN,IAAI,EAAE,OAAO;QACb,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;KACjD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CACzB,OAAiC,EACjC,GAAiB,EACjB,WAA0B;IAE1B,OAAO;QACN,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;KAChD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,QAAQ,CACvB,MAA4B,EAC5B,GAAiB,EACjB,WAA0B;IAE1B,OAAO;QACN,IAAI,EAAE,KAAK;QACX,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,GAAG,CAAC;KAChC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC/B,MAAkB,EAClB,GAAiB,EACjB,WAA0B;IAE1B,OAAO;QACN,IAAI,EAAE,aAAa;QACnB,EAAE,EAAE,WAAW,CAAC,MAAM,CAAC,EAAG,EAAE,GAAG,CAAC;QAChC,IAAI,EACH,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS;QACtE,IAAI,EACH,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS;KACtE,CAAC;AACH,CAAC"}