@xschemadev/core 0.0.6 → 0.1.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 (73) hide show
  1. package/dist/index.d.ts +5 -0
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +11 -0
  4. package/dist/index.js.map +1 -1
  5. package/dist/ir/constraints.d.ts +52 -0
  6. package/dist/ir/constraints.d.ts.map +1 -0
  7. package/dist/ir/constraints.js +6 -0
  8. package/dist/ir/constraints.js.map +1 -0
  9. package/dist/ir/index.d.ts +9 -0
  10. package/dist/ir/index.d.ts.map +1 -0
  11. package/dist/ir/index.js +8 -0
  12. package/dist/ir/index.js.map +1 -0
  13. package/dist/ir/nodes.d.ts +137 -0
  14. package/dist/ir/nodes.d.ts.map +1 -0
  15. package/dist/ir/nodes.js +11 -0
  16. package/dist/ir/nodes.js.map +1 -0
  17. package/dist/parser/collections.d.ts +11 -0
  18. package/dist/parser/collections.d.ts.map +1 -0
  19. package/dist/parser/collections.js +200 -0
  20. package/dist/parser/collections.js.map +1 -0
  21. package/dist/parser/composition.d.ts +14 -0
  22. package/dist/parser/composition.d.ts.map +1 -0
  23. package/dist/parser/composition.js +36 -0
  24. package/dist/parser/composition.js.map +1 -0
  25. package/dist/parser/context.d.ts +17 -0
  26. package/dist/parser/context.d.ts.map +1 -0
  27. package/dist/parser/context.js +12 -0
  28. package/dist/parser/context.js.map +1 -0
  29. package/dist/parser/index.d.ts +17 -0
  30. package/dist/parser/index.d.ts.map +1 -0
  31. package/dist/parser/index.js +314 -0
  32. package/dist/parser/index.js.map +1 -0
  33. package/dist/parser/primitives.d.ts +8 -0
  34. package/dist/parser/primitives.d.ts.map +1 -0
  35. package/dist/parser/primitives.js +32 -0
  36. package/dist/parser/primitives.js.map +1 -0
  37. package/dist/parser/values.d.ts +8 -0
  38. package/dist/parser/values.d.ts.map +1 -0
  39. package/dist/parser/values.js +16 -0
  40. package/dist/parser/values.js.map +1 -0
  41. package/dist/schema/index.d.ts +7 -0
  42. package/dist/schema/index.d.ts.map +1 -0
  43. package/dist/schema/index.js +6 -0
  44. package/dist/schema/index.js.map +1 -0
  45. package/dist/schema/json-schema.d.ts +67 -0
  46. package/dist/schema/json-schema.d.ts.map +1 -0
  47. package/dist/schema/json-schema.js +6 -0
  48. package/dist/schema/json-schema.js.map +1 -0
  49. package/dist/schema/normalizer.d.ts +15 -0
  50. package/dist/schema/normalizer.d.ts.map +1 -0
  51. package/dist/schema/normalizer.js +203 -0
  52. package/dist/schema/normalizer.js.map +1 -0
  53. package/dist/schema/version.d.ts +17 -0
  54. package/dist/schema/version.d.ts.map +1 -0
  55. package/dist/schema/version.js +58 -0
  56. package/dist/schema/version.js.map +1 -0
  57. package/dist/utils/code-builder.d.ts +42 -0
  58. package/dist/utils/code-builder.d.ts.map +1 -0
  59. package/dist/utils/code-builder.js +95 -0
  60. package/dist/utils/code-builder.js.map +1 -0
  61. package/dist/utils/index.d.ts +7 -0
  62. package/dist/utils/index.d.ts.map +1 -0
  63. package/dist/utils/index.js +7 -0
  64. package/dist/utils/index.js.map +1 -0
  65. package/dist/utils/json-pointer.d.ts +14 -0
  66. package/dist/utils/json-pointer.d.ts.map +1 -0
  67. package/dist/utils/json-pointer.js +38 -0
  68. package/dist/utils/json-pointer.js.map +1 -0
  69. package/dist/utils/primitives.d.ts +28 -0
  70. package/dist/utils/primitives.d.ts.map +1 -0
  71. package/dist/utils/primitives.js +57 -0
  72. package/dist/utils/primitives.js.map +1 -0
  73. package/package.json +1 -1
package/dist/index.d.ts CHANGED
@@ -1,3 +1,8 @@
1
1
  export type { XSchemaAdapter, ConvertInput, ConvertResult } from "./types.js";
2
2
  export { createAdapterCLI } from "./cli.js";
3
+ export type { JSONSchema, JSONSchemaVersion } from "./schema/index.js";
4
+ export { detectVersion, supportsRefSiblings, usesBooleanExclusive, normalizeSchema, normalizeDeep, } from "./schema/index.js";
5
+ 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";
6
+ export { parse, parseSchema, type ParseContext } from "./parser/index.js";
7
+ export { isPrimitive, escapeString, isEmptyObject, getOwnProperty, PROTOTYPE_PROPERTY_NAMES, hasPrototypeProperties, resolveJsonPointer, getRefName, chain, buildUnion, buildIntersection, buildSuperRefine, buildRefine, buildLiteral, buildSafeParseCheck, buildPropertyCheck, sortedStringify, } from "./utils/index.js";
3
8
  //# 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,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAG5C,YAAY,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,EACN,aAAa,EACb,mBAAmB,EACnB,oBAAoB,EACpB,eAAe,EACf,aAAa,GACb,MAAM,mBAAmB,CAAC;AAG3B,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,EACV,kBAAkB,EAClB,gBAAgB,GAChB,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAG1E,OAAO,EAEN,WAAW,EACX,YAAY,EACZ,aAAa,EACb,cAAc,EACd,wBAAwB,EACxB,sBAAsB,EAGtB,kBAAkB,EAClB,UAAU,EAGV,KAAK,EACL,UAAU,EACV,iBAAiB,EACjB,gBAAgB,EAChB,WAAW,EACX,YAAY,EACZ,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,GACf,MAAM,kBAAkB,CAAC"}
package/dist/index.js CHANGED
@@ -1,2 +1,13 @@
1
1
  export { createAdapterCLI } from "./cli.js";
2
+ export { detectVersion, supportsRefSiblings, usesBooleanExclusive, normalizeSchema, normalizeDeep, } from "./schema/index.js";
3
+ // Parser
4
+ export { parse, parseSchema } from "./parser/index.js";
5
+ // Utilities
6
+ export {
7
+ // Primitives
8
+ isPrimitive, escapeString, isEmptyObject, getOwnProperty, PROTOTYPE_PROPERTY_NAMES, hasPrototypeProperties,
9
+ // JSON Pointer
10
+ resolveJsonPointer, getRefName,
11
+ // Code builder
12
+ chain, buildUnion, buildIntersection, buildSuperRefine, buildRefine, buildLiteral, buildSafeParseCheck, buildPropertyCheck, sortedStringify, } from "./utils/index.js";
2
13
  //# 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;AAI5C,OAAO,EACN,aAAa,EACb,mBAAmB,EACnB,oBAAoB,EACpB,eAAe,EACf,aAAa,GACb,MAAM,mBAAmB,CAAC;AA4C3B,SAAS;AACT,OAAO,EAAE,KAAK,EAAE,WAAW,EAAqB,MAAM,mBAAmB,CAAC;AAE1E,YAAY;AACZ,OAAO;AACN,aAAa;AACb,WAAW,EACX,YAAY,EACZ,aAAa,EACb,cAAc,EACd,wBAAwB,EACxB,sBAAsB;AAEtB,eAAe;AACf,kBAAkB,EAClB,UAAU;AAEV,eAAe;AACf,KAAK,EACL,UAAU,EACV,iBAAiB,EACjB,gBAAgB,EAChB,WAAW,EACX,YAAY,EACZ,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,GACf,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,137 @@
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
+ additionalProperties: SchemaNode | boolean;
37
+ patternProperties: PatternPropertyDef[];
38
+ propertyNames?: SchemaNode;
39
+ minProperties?: number;
40
+ maxProperties?: number;
41
+ dependencies: Map<string, Dependency>;
42
+ }
43
+ /** Array schema node (homogeneous items) */
44
+ export interface ArrayNode {
45
+ kind: "array";
46
+ items: SchemaNode;
47
+ constraints: ArrayConstraints;
48
+ }
49
+ /** Tuple schema node (positional items) */
50
+ export interface TupleNode {
51
+ kind: "tuple";
52
+ prefixItems: SchemaNode[];
53
+ restItems: SchemaNode | false;
54
+ constraints: ArrayConstraints;
55
+ }
56
+ /** Union schema node (anyOf - at least one must match) */
57
+ export interface UnionNode {
58
+ kind: "union";
59
+ variants: SchemaNode[];
60
+ }
61
+ /** Intersection schema node (allOf - all must match) */
62
+ export interface IntersectionNode {
63
+ kind: "intersection";
64
+ schemas: SchemaNode[];
65
+ }
66
+ /** OneOf schema node (exactly one must match) */
67
+ export interface OneOfNode {
68
+ kind: "oneOf";
69
+ schemas: SchemaNode[];
70
+ }
71
+ /** Not schema node (must not match) */
72
+ export interface NotNode {
73
+ kind: "not";
74
+ schema: SchemaNode;
75
+ }
76
+ /** Literal schema node (const) */
77
+ export interface LiteralNode {
78
+ kind: "literal";
79
+ value: unknown;
80
+ }
81
+ /** Enum schema node */
82
+ export interface EnumNode {
83
+ kind: "enum";
84
+ values: unknown[];
85
+ }
86
+ /** Any schema node (accepts everything) */
87
+ export interface AnyNode {
88
+ kind: "any";
89
+ }
90
+ /** Never schema node (accepts nothing) */
91
+ export interface NeverNode {
92
+ kind: "never";
93
+ }
94
+ /** Reference schema node */
95
+ export interface RefNode {
96
+ kind: "ref";
97
+ path: string;
98
+ resolved: SchemaNode;
99
+ }
100
+ /** Conditional schema node (if/then/else) */
101
+ export interface ConditionalNode {
102
+ kind: "conditional";
103
+ if: SchemaNode;
104
+ then?: SchemaNode;
105
+ else?: SchemaNode;
106
+ }
107
+ /**
108
+ * Type-guarded schema node
109
+ * Used when JSON Schema has type-specific keywords but no explicit type.
110
+ * The schema only applies when the value matches the type check.
111
+ */
112
+ export interface TypeGuardedNode {
113
+ kind: "typeGuarded";
114
+ guards: TypeGuard[];
115
+ }
116
+ export interface TypeGuard {
117
+ check: TypeCheck;
118
+ schema: SchemaNode;
119
+ }
120
+ export type TypeCheck = "object" | "array" | "string" | "number";
121
+ /**
122
+ * Nullable wrapper node
123
+ * Represents OpenAPI 3.0 nullable or union with null
124
+ */
125
+ export interface NullableNode {
126
+ kind: "nullable";
127
+ inner: SchemaNode;
128
+ }
129
+ /** The discriminated union of all schema nodes */
130
+ export type SchemaNode = StringNode | NumberNode | BooleanNode | NullNode | ObjectNode | ArrayNode | TupleNode | UnionNode | IntersectionNode | OneOfNode | NotNode | LiteralNode | EnumNode | AnyNode | NeverNode | RefNode | ConditionalNode | TypeGuardedNode | NullableNode;
131
+ /** Helper type to extract a specific node kind */
132
+ export type NodeOfKind<K extends SchemaNode["kind"]> = Extract<SchemaNode, {
133
+ kind: K;
134
+ }>;
135
+ /** All possible node kinds */
136
+ export type NodeKind = SchemaNode["kind"];
137
+ //# 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,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,WAAW,CAC1B,MAAM,EAAE,UAAU,EAClB,GAAG,EAAE,YAAY,EACjB,WAAW,EAAE,aAAa,GACxB,UAAU,CA4HZ;AAED,wBAAgB,UAAU,CACzB,MAAM,EAAE,UAAU,EAClB,GAAG,EAAE,YAAY,EACjB,WAAW,EAAE,aAAa,GACxB,SAAS,GAAG,SAAS,CAgCvB"}
@@ -0,0 +1,200 @@
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
+ let additionalProperties = true;
53
+ if (schema.additionalProperties === false) {
54
+ additionalProperties = false;
55
+ }
56
+ else if (schema.additionalProperties &&
57
+ typeof schema.additionalProperties === "object") {
58
+ additionalProperties = parseSchema(schema.additionalProperties, ctx);
59
+ }
60
+ // Parse propertyNames
61
+ const propertyNames = schema.propertyNames !== undefined
62
+ ? parseSchema(schema.propertyNames, ctx)
63
+ : undefined;
64
+ // Parse dependencies
65
+ const dependencies = new Map();
66
+ // Handle dependentRequired
67
+ if (schema.dependentRequired) {
68
+ for (const [prop, deps] of Object.entries(schema.dependentRequired)) {
69
+ dependencies.set(prop, {
70
+ kind: "property",
71
+ requiredProperties: deps,
72
+ });
73
+ }
74
+ }
75
+ // Handle dependentSchemas
76
+ if (schema.dependentSchemas) {
77
+ for (const [prop, depSchema] of Object.entries(schema.dependentSchemas)) {
78
+ dependencies.set(prop, {
79
+ kind: "schema",
80
+ schema: parseSchema(depSchema, ctx),
81
+ });
82
+ }
83
+ }
84
+ // Handle legacy dependencies (draft3-7)
85
+ if (schema.dependencies) {
86
+ for (const [prop, dep] of Object.entries(schema.dependencies)) {
87
+ if (Array.isArray(dep)) {
88
+ dependencies.set(prop, {
89
+ kind: "property",
90
+ requiredProperties: dep,
91
+ });
92
+ }
93
+ else {
94
+ dependencies.set(prop, {
95
+ kind: "schema",
96
+ schema: parseSchema(dep, ctx),
97
+ });
98
+ }
99
+ }
100
+ }
101
+ return {
102
+ kind: "object",
103
+ properties,
104
+ additionalProperties,
105
+ patternProperties,
106
+ propertyNames,
107
+ minProperties: schema.minProperties,
108
+ maxProperties: schema.maxProperties,
109
+ dependencies,
110
+ };
111
+ }
112
+ export function parseArray(schema, ctx, parseSchema) {
113
+ const prefixItems = schema.prefixItems;
114
+ const items = schema.items;
115
+ // Check for tuple (prefixItems or items as array)
116
+ if (prefixItems && Array.isArray(prefixItems)) {
117
+ return parseTuple(schema, ctx, parseSchema);
118
+ }
119
+ if (Array.isArray(items)) {
120
+ return parseTupleFromItems(schema, ctx, parseSchema);
121
+ }
122
+ // Regular array
123
+ let itemSchema = { kind: "any" };
124
+ if (items && typeof items === "object") {
125
+ itemSchema = parseSchema(items, ctx);
126
+ }
127
+ else if (items === false) {
128
+ // items: false means empty tuple only
129
+ return {
130
+ kind: "tuple",
131
+ prefixItems: [],
132
+ restItems: false,
133
+ constraints: buildArrayConstraints(schema, ctx, parseSchema),
134
+ };
135
+ }
136
+ return {
137
+ kind: "array",
138
+ items: itemSchema,
139
+ constraints: buildArrayConstraints(schema, ctx, parseSchema),
140
+ };
141
+ }
142
+ function parseTuple(schema, ctx, parseSchema) {
143
+ const prefixItems = schema.prefixItems;
144
+ const items = schema.items;
145
+ const additionalItems = schema.additionalItems;
146
+ const parsedPrefixItems = prefixItems.map((item) => parseSchema(item, ctx));
147
+ // Determine rest items
148
+ let restItems = { kind: "any" };
149
+ if (items === false || additionalItems === false) {
150
+ restItems = false;
151
+ }
152
+ else if (items && typeof items === "object" && !Array.isArray(items)) {
153
+ restItems = parseSchema(items, ctx);
154
+ }
155
+ else if (additionalItems && typeof additionalItems === "object") {
156
+ restItems = parseSchema(additionalItems, ctx);
157
+ }
158
+ return {
159
+ kind: "tuple",
160
+ prefixItems: parsedPrefixItems,
161
+ restItems,
162
+ constraints: buildArrayConstraints(schema, ctx, parseSchema),
163
+ };
164
+ }
165
+ function parseTupleFromItems(schema, ctx, parseSchema) {
166
+ const items = schema.items;
167
+ const additionalItems = schema.additionalItems;
168
+ const parsedItems = items.map((item) => parseSchema(item, ctx));
169
+ // Determine rest items
170
+ let restItems = { kind: "any" };
171
+ if (additionalItems === false) {
172
+ restItems = false;
173
+ }
174
+ else if (additionalItems && typeof additionalItems === "object") {
175
+ restItems = parseSchema(additionalItems, ctx);
176
+ }
177
+ return {
178
+ kind: "tuple",
179
+ prefixItems: parsedItems,
180
+ restItems,
181
+ constraints: buildArrayConstraints(schema, ctx, parseSchema),
182
+ };
183
+ }
184
+ function buildArrayConstraints(schema, ctx, parseSchema) {
185
+ let contains;
186
+ if (schema.contains !== undefined) {
187
+ contains = {
188
+ schema: parseSchema(schema.contains, ctx),
189
+ minContains: schema.minContains ?? 1,
190
+ maxContains: schema.maxContains,
191
+ };
192
+ }
193
+ return {
194
+ minItems: schema.minItems,
195
+ maxItems: schema.maxItems,
196
+ uniqueItems: schema.uniqueItems,
197
+ contains,
198
+ };
199
+ }
200
+ //# 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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Parser context for tracking state during parsing
3
+ */
4
+ import type { JSONSchema, JSONSchemaVersion } from "../schema/json-schema.js";
5
+ import type { SchemaNode } from "../ir/nodes.js";
6
+ export interface ParseContext {
7
+ /** Detected JSON Schema version */
8
+ version: JSONSchemaVersion;
9
+ /** Root schema (for $ref resolution) */
10
+ rootSchema: JSONSchema;
11
+ /** Cache of resolved refs */
12
+ refs: Map<string, SchemaNode>;
13
+ /** Currently processing refs (for circular detection) */
14
+ processing: Set<string>;
15
+ }
16
+ export declare function createContext(rootSchema: JSONSchema, version: JSONSchemaVersion): ParseContext;
17
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/parser/context.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC9E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEjD,MAAM,WAAW,YAAY;IAC5B,mCAAmC;IACnC,OAAO,EAAE,iBAAiB,CAAC;IAE3B,wCAAwC;IACxC,UAAU,EAAE,UAAU,CAAC;IAEvB,6BAA6B;IAC7B,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAE9B,yDAAyD;IACzD,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACxB;AAED,wBAAgB,aAAa,CAC5B,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,iBAAiB,GACxB,YAAY,CAOd"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Parser context for tracking state during parsing
3
+ */
4
+ export function createContext(rootSchema, version) {
5
+ return {
6
+ version,
7
+ rootSchema,
8
+ refs: new Map(),
9
+ processing: new Set(),
10
+ };
11
+ }
12
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/parser/context.ts"],"names":[],"mappings":"AAAA;;GAEG;AAmBH,MAAM,UAAU,aAAa,CAC5B,UAAsB,EACtB,OAA0B;IAE1B,OAAO;QACN,OAAO;QACP,UAAU;QACV,IAAI,EAAE,IAAI,GAAG,EAAE;QACf,UAAU,EAAE,IAAI,GAAG,EAAE;KACrB,CAAC;AACH,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * JSON Schema Parser
3
+ * Converts JSON Schema to SchemaNode IR
4
+ */
5
+ import type { JSONSchema } from "../schema/json-schema.js";
6
+ import type { SchemaNode } from "../ir/nodes.js";
7
+ import { type ParseContext } from "./context.js";
8
+ export type { ParseContext } from "./context.js";
9
+ /**
10
+ * Parse a JSON Schema into SchemaNode IR
11
+ */
12
+ export declare function parse(schema: JSONSchema | boolean): SchemaNode;
13
+ /**
14
+ * Internal schema parser - recursive
15
+ */
16
+ export declare function parseSchema(schema: JSONSchema | boolean, ctx: ParseContext): SchemaNode;
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/parser/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,KAAK,EAAE,UAAU,EAAa,MAAM,gBAAgB,CAAC;AAK5D,OAAO,EAAiB,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AAYhE,YAAY,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD;;GAEG;AACH,wBAAgB,KAAK,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,GAAG,UAAU,CAU9D;AAED;;GAEG;AACH,wBAAgB,WAAW,CAC1B,MAAM,EAAE,UAAU,GAAG,OAAO,EAC5B,GAAG,EAAE,YAAY,GACf,UAAU,CAoIZ"}