@depup/typebox 1.3.22-depup.0 → 1.3.30-depup.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 (136) hide show
  1. package/README.md +2 -2
  2. package/build/compile/validator.d.mts +1 -1
  3. package/build/compile/validator.mjs +1 -1
  4. package/build/format/iri.mjs +5 -1
  5. package/build/schema/build.mjs +2 -2
  6. package/build/schema/check.mjs +1 -1
  7. package/build/schema/compile.d.mts +3 -2
  8. package/build/schema/compile.mjs +8 -8
  9. package/build/schema/engine/_context.d.mts +6 -7
  10. package/build/schema/engine/_context.mjs +23 -15
  11. package/build/schema/engine/_functions.d.mts +2 -2
  12. package/build/schema/engine/_functions.mjs +1 -1
  13. package/build/schema/engine/_reducer.d.mts +3 -3
  14. package/build/schema/engine/_refine.d.mts +5 -5
  15. package/build/schema/engine/_refine.mjs +4 -7
  16. package/build/schema/engine/_stack.d.mts +34 -16
  17. package/build/schema/engine/_stack.mjs +148 -104
  18. package/build/schema/engine/additionalItems.d.mts +4 -4
  19. package/build/schema/engine/additionalProperties.d.mts +8 -8
  20. package/build/schema/engine/additionalProperties.mjs +11 -17
  21. package/build/schema/engine/allOf.d.mts +4 -4
  22. package/build/schema/engine/allOf.mjs +3 -3
  23. package/build/schema/engine/anyOf.d.mts +4 -4
  24. package/build/schema/engine/anyOf.mjs +5 -10
  25. package/build/schema/engine/boolean.d.mts +4 -4
  26. package/build/schema/engine/boolean.mjs +2 -6
  27. package/build/schema/engine/const.d.mts +4 -4
  28. package/build/schema/engine/const.mjs +2 -6
  29. package/build/schema/engine/contains.d.mts +4 -4
  30. package/build/schema/engine/contains.mjs +2 -6
  31. package/build/schema/engine/dependencies.d.mts +4 -4
  32. package/build/schema/engine/dependencies.mjs +3 -6
  33. package/build/schema/engine/dependentRequired.d.mts +4 -4
  34. package/build/schema/engine/dependentRequired.mjs +2 -6
  35. package/build/schema/engine/dependentSchemas.d.mts +4 -4
  36. package/build/schema/engine/dynamicRef.d.mts +4 -4
  37. package/build/schema/engine/dynamicRef.mjs +11 -7
  38. package/build/schema/engine/enum.d.mts +4 -4
  39. package/build/schema/engine/enum.mjs +2 -6
  40. package/build/schema/engine/exclusiveMaximum.d.mts +4 -4
  41. package/build/schema/engine/exclusiveMaximum.mjs +2 -6
  42. package/build/schema/engine/exclusiveMinimum.d.mts +4 -4
  43. package/build/schema/engine/exclusiveMinimum.mjs +2 -6
  44. package/build/schema/engine/format.d.mts +4 -4
  45. package/build/schema/engine/format.mjs +2 -6
  46. package/build/schema/engine/if.d.mts +4 -4
  47. package/build/schema/engine/if.mjs +7 -15
  48. package/build/schema/engine/items.d.mts +4 -4
  49. package/build/schema/engine/items.mjs +1 -1
  50. package/build/schema/engine/maxContains.d.mts +4 -4
  51. package/build/schema/engine/maxContains.mjs +2 -6
  52. package/build/schema/engine/maxItems.d.mts +4 -4
  53. package/build/schema/engine/maxItems.mjs +2 -6
  54. package/build/schema/engine/maxLength.d.mts +4 -4
  55. package/build/schema/engine/maxLength.mjs +2 -6
  56. package/build/schema/engine/maxProperties.d.mts +4 -4
  57. package/build/schema/engine/maxProperties.mjs +2 -6
  58. package/build/schema/engine/maximum.d.mts +4 -4
  59. package/build/schema/engine/maximum.mjs +2 -6
  60. package/build/schema/engine/minContains.d.mts +4 -4
  61. package/build/schema/engine/minContains.mjs +2 -6
  62. package/build/schema/engine/minItems.d.mts +5 -5
  63. package/build/schema/engine/minItems.mjs +2 -6
  64. package/build/schema/engine/minLength.d.mts +4 -4
  65. package/build/schema/engine/minLength.mjs +2 -6
  66. package/build/schema/engine/minProperties.d.mts +4 -4
  67. package/build/schema/engine/minProperties.mjs +2 -6
  68. package/build/schema/engine/minimum.d.mts +4 -4
  69. package/build/schema/engine/minimum.mjs +2 -6
  70. package/build/schema/engine/multipleOf.d.mts +4 -4
  71. package/build/schema/engine/multipleOf.mjs +2 -6
  72. package/build/schema/engine/not.d.mts +4 -4
  73. package/build/schema/engine/not.mjs +4 -8
  74. package/build/schema/engine/oneOf.d.mts +4 -4
  75. package/build/schema/engine/oneOf.mjs +6 -11
  76. package/build/schema/engine/pattern.d.mts +4 -4
  77. package/build/schema/engine/pattern.mjs +3 -7
  78. package/build/schema/engine/patternProperties.d.mts +4 -4
  79. package/build/schema/engine/patternProperties.mjs +1 -1
  80. package/build/schema/engine/prefixItems.d.mts +4 -4
  81. package/build/schema/engine/prefixItems.mjs +1 -1
  82. package/build/schema/engine/properties.d.mts +4 -4
  83. package/build/schema/engine/properties.mjs +1 -1
  84. package/build/schema/engine/propertyNames.d.mts +4 -4
  85. package/build/schema/engine/propertyNames.mjs +4 -10
  86. package/build/schema/engine/recursiveRef.d.mts +4 -4
  87. package/build/schema/engine/recursiveRef.mjs +11 -7
  88. package/build/schema/engine/ref.d.mts +4 -4
  89. package/build/schema/engine/ref.mjs +19 -15
  90. package/build/schema/engine/required.d.mts +4 -4
  91. package/build/schema/engine/required.mjs +2 -6
  92. package/build/schema/engine/schema.d.mts +7 -7
  93. package/build/schema/engine/schema.mjs +137 -133
  94. package/build/schema/engine/type.d.mts +4 -4
  95. package/build/schema/engine/type.mjs +2 -6
  96. package/build/schema/engine/unevaluatedItems.d.mts +4 -4
  97. package/build/schema/engine/unevaluatedItems.mjs +5 -9
  98. package/build/schema/engine/unevaluatedProperties.d.mts +4 -4
  99. package/build/schema/engine/unevaluatedProperties.mjs +5 -9
  100. package/build/schema/engine/uniqueItems.d.mts +4 -4
  101. package/build/schema/engine/uniqueItems.mjs +2 -6
  102. package/build/schema/errors.d.mts +2 -2
  103. package/build/schema/errors.mjs +8 -14
  104. package/build/schema/intern/index.d.mts +1 -0
  105. package/build/schema/intern/index.mjs +1 -0
  106. package/build/schema/intern/intern.d.mts +11 -0
  107. package/build/schema/intern/intern.mjs +293 -0
  108. package/build/schema/meta/draft_2019_09.d.mts +2 -0
  109. package/build/schema/meta/draft_2019_09.mjs +288 -0
  110. package/build/schema/meta/draft_2020_12.d.mts +2 -0
  111. package/build/schema/meta/draft_2020_12.mjs +300 -0
  112. package/build/schema/meta/draft_3.d.mts +2 -0
  113. package/build/schema/meta/draft_3.mjs +143 -0
  114. package/build/schema/meta/draft_4.d.mts +2 -0
  115. package/build/schema/meta/draft_4.mjs +149 -0
  116. package/build/schema/meta/draft_6.d.mts +2 -0
  117. package/build/schema/meta/draft_6.mjs +155 -0
  118. package/build/schema/meta/draft_7.d.mts +2 -0
  119. package/build/schema/meta/draft_7.mjs +172 -0
  120. package/build/schema/meta/index.d.mts +2 -0
  121. package/build/schema/meta/index.mjs +2 -0
  122. package/build/schema/meta/meta.d.mts +9 -0
  123. package/build/schema/meta/meta.mjs +15 -0
  124. package/build/schema/meta/schema.d.mts +6 -0
  125. package/build/schema/meta/schema.mjs +1 -0
  126. package/build/schema/parse.d.mts +1 -0
  127. package/build/schema/parse.mjs +10 -5
  128. package/build/schema/resolve/resolve.d.mts +8 -3
  129. package/build/schema/resolve/resolve.mjs +268 -139
  130. package/build/schema/schema.d.mts +2 -0
  131. package/build/schema/schema.mjs +2 -0
  132. package/build/value/errors/errors.d.mts +2 -12
  133. package/build/value/errors/errors.mjs +2 -7
  134. package/changes.json +1 -1
  135. package/package.json +3 -3
  136. package/readme.md +59 -89
@@ -1,6 +1,6 @@
1
1
  import * as Schema from '../types/index.mjs';
2
- import { Stack } from './_stack.mjs';
2
+ import * as Stack from './_stack.mjs';
3
3
  import { BuildContext, CheckContext, ErrorContext } from './_context.mjs';
4
- export declare function BuildUniqueItems(_stack: Stack, _context: BuildContext, schema: Schema.XUniqueItems, value: string): string;
5
- export declare function CheckUniqueItems(_stack: Stack, _context: CheckContext, schema: Schema.XUniqueItems, value: unknown[]): boolean;
6
- export declare function ErrorUniqueItems(_stack: Stack, context: ErrorContext, schemaPath: string, instancePath: string, schema: Schema.XUniqueItems, value: unknown[]): boolean;
4
+ export declare function BuildUniqueItems(_stack: Stack.XStack, _context: BuildContext, schema: Schema.XUniqueItems, value: string): string;
5
+ export declare function CheckUniqueItems(_stack: Stack.XStack, _context: CheckContext, schema: Schema.XUniqueItems, value: unknown[]): boolean;
6
+ export declare function ErrorUniqueItems(_stack: Stack.XStack, context: ErrorContext, schemaPath: string, instancePath: string, schema: Schema.XUniqueItems, value: unknown[]): boolean;
@@ -42,10 +42,6 @@ export function ErrorUniqueItems(_stack, context, schemaPath, instancePath, sche
42
42
  return result;
43
43
  }, []);
44
44
  const isUniqueItems = G.IsEqual(duplicateItems.length, 0);
45
- return isUniqueItems || context.AddError({
46
- keyword: 'uniqueItems',
47
- schemaPath,
48
- instancePath,
49
- params: { duplicateItems },
50
- });
45
+ return isUniqueItems ||
46
+ context.AddError('uniqueItems', schemaPath, instancePath, { duplicateItems });
51
47
  }
@@ -1,6 +1,6 @@
1
1
  import { type TLocalizedValidationError } from '../error/index.mjs';
2
2
  import * as Schema from './types/index.mjs';
3
- /** Checks a value and returns validation errors */
3
+ /** Returns an array of validation errors for the given value. */
4
4
  export declare function Errors(schema: Schema.XSchema, value: unknown): [boolean, TLocalizedValidationError[]];
5
- /** Checks a value and returns validation errors */
5
+ /** Returns an array of validation errors for the given value. */
6
6
  export declare function Errors(context: Record<PropertyKey, Schema.XSchema>, schema: Schema.XSchema, value: unknown): [boolean, TLocalizedValidationError[]];
@@ -1,24 +1,18 @@
1
1
  // deno-fmt-ignore-file
2
2
  import { Arguments } from '../system/arguments/index.mjs';
3
- import { Settings } from '../system/settings/index.mjs';
4
- import { Get as LocaleGet } from '../system/locale/_config.mjs';
5
- import { Guard } from '../guard/index.mjs';
3
+ import { Get as GetLocalizationFunction } from '../system/locale/_config.mjs';
6
4
  import * as Engine from './engine/index.mjs';
7
- /** Checks a value and returns validation errors */
5
+ /** Returns an array of validation errors for the given value. */
8
6
  export function Errors(...args) {
9
7
  const [context, schema, value] = Arguments.Match(args, {
10
8
  3: (context, schema, value) => [context, schema, value],
11
9
  2: (schema, value) => [{}, schema, value]
12
10
  });
13
- const settings = Settings.Get();
14
- const locale = LocaleGet();
15
- const errors = [];
16
- const stack = new Engine.Stack(context, schema);
17
- const errorContext = new Engine.ErrorContext(error => {
18
- if (Guard.IsGreaterEqualThan(errors.length, settings.maxErrors))
19
- return;
20
- return errors.push({ ...error, message: locale(error) });
21
- });
11
+ const stack = Engine.Stack(context, schema);
12
+ const errorContext = new Engine.ErrorContext();
22
13
  const result = Engine.ErrorSchema(stack, errorContext, '#', '', schema, value);
23
- return [result, errors];
14
+ const errors = errorContext.GetErrors();
15
+ const locale = GetLocalizationFunction();
16
+ const localized = errors.map(error => ({ ...error, message: locale(error) }));
17
+ return [result, localized];
24
18
  }
@@ -0,0 +1 @@
1
+ export * from './intern.mjs';
@@ -0,0 +1 @@
1
+ export * from './intern.mjs';
@@ -0,0 +1,11 @@
1
+ import * as Schema from '../types/index.mjs';
2
+ import { type XStatic } from '../static/index.mjs';
3
+ export interface XIntern<Type extends unknown = unknown> {
4
+ '~unsafe': Type;
5
+ $ref: string;
6
+ $defs: Record<string, Schema.XSchemaObject>;
7
+ }
8
+ /** (Experimental) This function restructures the schema such that each distinct sub-schema is stored exactly once in a $defs object and keyed by content hash. */
9
+ export declare function Intern<const Schema extends Schema.XSchema>(schema: Schema): XIntern<XStatic<Schema>>;
10
+ /** (Experimental) This function restructures the schema such that each distinct sub-schema is stored exactly once in a $defs object and keyed by content hash. */
11
+ export declare function Intern<const Schema extends Schema.XSchema>(context: Record<PropertyKey, Schema.XSchema>, schema: Schema): XIntern<XStatic<Schema>>;
@@ -0,0 +1,293 @@
1
+ import { Arguments } from '../../system/arguments/index.mjs';
2
+ import { Hashing, Memory } from '../../system/index.mjs';
3
+ import * as Schema from '../types/index.mjs';
4
+ import * as Stack from '../engine/_stack.mjs';
5
+ import { Guard } from '../../guard/index.mjs';
6
+ import { Resolve } from '../resolve/index.mjs';
7
+ // ----------------------------------------------------------------
8
+ // UnresolvableRef
9
+ // ----------------------------------------------------------------
10
+ function UnresolvableRef(ref) {
11
+ throw Error(`UnresolvableRef '${ref}'`);
12
+ }
13
+ // ----------------------------------------------------------------
14
+ // HashKey
15
+ // ----------------------------------------------------------------
16
+ function HashKey(schema) {
17
+ return `x-${Hashing.Hash(schema)}`;
18
+ }
19
+ // ----------------------------------------------------------------
20
+ // AdditionalItems
21
+ // ----------------------------------------------------------------
22
+ function FromAdditionalItems(context, schema) {
23
+ return FromSchema(context, schema.additionalItems);
24
+ }
25
+ // ----------------------------------------------------------------
26
+ // AdditionalProperties
27
+ // ----------------------------------------------------------------
28
+ function FromAdditionalProperties(context, schema) {
29
+ return FromSchema(context, schema.additionalProperties);
30
+ }
31
+ // ----------------------------------------------------------------
32
+ // AllOf
33
+ // ----------------------------------------------------------------
34
+ function FromAllOf(context, schema) {
35
+ return schema.allOf.map((inner) => FromSchema(context, inner));
36
+ }
37
+ // ----------------------------------------------------------------
38
+ // AnyOf
39
+ // ----------------------------------------------------------------
40
+ function FromAnyOf(context, schema) {
41
+ return schema.anyOf.map((inner) => FromSchema(context, inner));
42
+ }
43
+ // ----------------------------------------------------------------
44
+ // Contains
45
+ // ----------------------------------------------------------------
46
+ function FromContains(context, schema) {
47
+ return FromSchema(context, schema.contains);
48
+ }
49
+ // ----------------------------------------------------------------
50
+ // DependentSchemas
51
+ // ----------------------------------------------------------------
52
+ function FromDependentSchemas(context, schema) {
53
+ return Guard.Keys(schema.dependentSchemas).reduce((result, key) => ({ ...result, [key]: FromSchema(context, schema.dependentSchemas[key]) }), {});
54
+ }
55
+ // ----------------------------------------------------------------
56
+ // Else
57
+ // ----------------------------------------------------------------
58
+ function FromElse(context, schema) {
59
+ return FromSchema(context, schema.else);
60
+ }
61
+ // ----------------------------------------------------------------
62
+ // If
63
+ // ----------------------------------------------------------------
64
+ function FromIf(context, schema) {
65
+ return FromSchema(context, schema.if);
66
+ }
67
+ // ----------------------------------------------------------------
68
+ // Items
69
+ // ----------------------------------------------------------------
70
+ function FromItems(context, schema) {
71
+ return Schema.IsItemsSized(schema) ? FromItemsSized(context, schema) : FromItemsUnsized(context, schema);
72
+ }
73
+ // ----------------------------------------------------------------
74
+ // ItemsSized
75
+ // ----------------------------------------------------------------
76
+ function FromItemsSized(context, schema) {
77
+ return schema.items.map((inner) => FromSchema(context, inner));
78
+ }
79
+ // ----------------------------------------------------------------
80
+ // ItemsUnsized
81
+ // ----------------------------------------------------------------
82
+ function FromItemsUnsized(context, schema) {
83
+ return FromSchema(context, schema.items);
84
+ }
85
+ // ----------------------------------------------------------------
86
+ // Not
87
+ // ----------------------------------------------------------------
88
+ function FromNot(context, schema) {
89
+ return FromSchema(context, schema.not);
90
+ }
91
+ // ----------------------------------------------------------------
92
+ // OneOf
93
+ // ----------------------------------------------------------------
94
+ function FromOneOf(context, schema) {
95
+ return schema.oneOf.map((inner) => FromSchema(context, inner));
96
+ }
97
+ // ----------------------------------------------------------------
98
+ // PatternProperties
99
+ // ----------------------------------------------------------------
100
+ function FromPatternProperties(context, schema) {
101
+ return Guard.Keys(schema.patternProperties).reduce((result, key) => ({ ...result, [key]: FromSchema(context, schema.patternProperties[key]) }), {});
102
+ }
103
+ // ----------------------------------------------------------------
104
+ // PrefixItems
105
+ // ----------------------------------------------------------------
106
+ function FromPrefixItems(context, schema) {
107
+ return schema.prefixItems.map((inner) => FromSchema(context, inner));
108
+ }
109
+ // ----------------------------------------------------------------
110
+ // Properties
111
+ // ----------------------------------------------------------------
112
+ function FromProperties(context, schema) {
113
+ return Guard.Keys(schema.properties).reduce((result, key) => ({ ...result, [key]: FromSchema(context, schema.properties[key]) }), {});
114
+ }
115
+ // ----------------------------------------------------------------
116
+ // PropertyNames
117
+ // ----------------------------------------------------------------
118
+ function FromPropertyNames(context, schema) {
119
+ return FromSchema(context, schema.propertyNames);
120
+ }
121
+ // ----------------------------------------------------------------
122
+ // Ref
123
+ // ----------------------------------------------------------------
124
+ function ResolveRef(stack, ref) {
125
+ const result = Resolve.Ref(stack, { $ref: ref });
126
+ return { schema: result.schema ?? UnresolvableRef(ref), stack: result.stack };
127
+ }
128
+ // ----------------------------------------------------------------
129
+ // DynamicRef
130
+ // ----------------------------------------------------------------
131
+ function ResolveDynamicRef(stack, schema) {
132
+ return Resolve.DynamicRef(stack, schema) ?? UnresolvableRef(schema.$dynamicRef);
133
+ }
134
+ // ----------------------------------------------------------------
135
+ // RecursiveRef
136
+ // ----------------------------------------------------------------
137
+ function ResolveRecursiveRef(stack, schema) {
138
+ return Resolve.RecursiveRef(stack, schema) ?? UnresolvableRef(schema.$recursiveRef);
139
+ }
140
+ // ----------------------------------------------------------------
141
+ // FromResolvedRef (shared logic for Ref, DynamicRef, RecursiveRef)
142
+ // ----------------------------------------------------------------
143
+ function FromResolvedRef(context, target, nextStack) {
144
+ const nextContext = { ...context, stack: nextStack };
145
+ const resolving = context.resolving.get(target);
146
+ if (Guard.IsUndefined(resolving))
147
+ return FromSchema(nextContext, target);
148
+ // Target is mid-intern, so this is a cycle (point at its reserved placeholder)
149
+ resolving.used = true;
150
+ return { $ref: `#/$defs/${resolving.key}` };
151
+ }
152
+ // ----------------------------------------------------------------
153
+ // FromRef
154
+ // ----------------------------------------------------------------
155
+ function FromRef(context, schema) {
156
+ // Resolve target off the current traversal stack, carrying forward any resource crossing
157
+ const { schema: target, stack } = ResolveRef(context.stack, schema.$ref);
158
+ return FromResolvedRef(context, target, stack);
159
+ }
160
+ // ----------------------------------------------------------------
161
+ // FromDynamicRef
162
+ // ----------------------------------------------------------------
163
+ function FromDynamicRef(context, schema) {
164
+ // Resolve target off the current traversal stack (dynamic scope depends on anchors seen so far)
165
+ const target = ResolveDynamicRef(context.stack, schema);
166
+ return FromResolvedRef(context, target, { ...context.stack, pendingResource: true });
167
+ }
168
+ // ----------------------------------------------------------------
169
+ // FromRecursiveRef
170
+ // ----------------------------------------------------------------
171
+ function FromRecursiveRef(context, schema) {
172
+ // Resolve target off the current traversal stack (recursive scope depends on the path taken so far)
173
+ const target = ResolveRecursiveRef(context.stack, schema);
174
+ return FromResolvedRef(context, target, { ...context.stack, pendingResource: true });
175
+ }
176
+ // ----------------------------------------------------------------
177
+ // Then
178
+ // ----------------------------------------------------------------
179
+ function FromThen(context, schema) {
180
+ return FromSchema(context, schema.then);
181
+ }
182
+ // ----------------------------------------------------------------
183
+ // UnevaluatedItems
184
+ // ----------------------------------------------------------------
185
+ function FromUnevaluatedItems(context, schema) {
186
+ return FromSchema(context, schema.unevaluatedItems);
187
+ }
188
+ // ----------------------------------------------------------------
189
+ // UnevaluatedProperties
190
+ // ----------------------------------------------------------------
191
+ function FromUnevaluatedProperties(context, schema) {
192
+ return FromSchema(context, schema.unevaluatedProperties);
193
+ }
194
+ // ----------------------------------------------------------------
195
+ // SchemaObject
196
+ // ----------------------------------------------------------------
197
+ function FromSchemaObject(context, schema) {
198
+ // Reference-style schemas resolve to another node and cannot contain other keywords
199
+ if (Schema.IsRef(schema))
200
+ return FromRef(context, schema);
201
+ if (Schema.IsDynamicRef(schema))
202
+ return FromDynamicRef(context, schema);
203
+ if (Schema.IsRecursiveRef(schema))
204
+ return FromRecursiveRef(context, schema);
205
+ // Check if the schema has already been resolved
206
+ const existing = resolved.get(schema);
207
+ if (!Guard.IsUndefined(existing))
208
+ return existing;
209
+ // Reserve a placeholder key in case a nested ref cycles back to this schema
210
+ const reservation = { key: `x-ref-${context.resolving.size}`, used: false };
211
+ context.resolving.set(schema, reservation);
212
+ // Intern each subschema
213
+ const remapped = {
214
+ ...(Schema.IsRefine(schema) ? { ['~refine']: schema['~refine'] } : {}),
215
+ ...(Schema.IsAdditionalItems(schema) ? { additionalItems: FromAdditionalItems(context, schema) } : {}),
216
+ ...(Schema.IsAdditionalProperties(schema) ? { additionalProperties: FromAdditionalProperties(context, schema) } : {}),
217
+ ...(Schema.IsAllOf(schema) ? { allOf: FromAllOf(context, schema) } : {}),
218
+ ...(Schema.IsAnyOf(schema) ? { anyOf: FromAnyOf(context, schema) } : {}),
219
+ ...(Schema.IsContains(schema) ? { contains: FromContains(context, schema) } : {}),
220
+ ...(Schema.IsDependentSchemas(schema) ? { dependentSchemas: FromDependentSchemas(context, schema) } : {}),
221
+ ...(Schema.IsElse(schema) ? { else: FromElse(context, schema) } : {}),
222
+ ...(Schema.IsIf(schema) ? { if: FromIf(context, schema) } : {}),
223
+ ...(Schema.IsItems(schema) ? { items: FromItems(context, schema) } : {}),
224
+ ...(Schema.IsNot(schema) ? { not: FromNot(context, schema) } : {}),
225
+ ...(Schema.IsOneOf(schema) ? { oneOf: FromOneOf(context, schema) } : {}),
226
+ ...(Schema.IsPatternProperties(schema) ? { patternProperties: FromPatternProperties(context, schema) } : {}),
227
+ ...(Schema.IsPrefixItems(schema) ? { prefixItems: FromPrefixItems(context, schema) } : {}),
228
+ ...(Schema.IsProperties(schema) ? { properties: FromProperties(context, schema) } : {}),
229
+ ...(Schema.IsPropertyNames(schema) ? { propertyNames: FromPropertyNames(context, schema) } : {}),
230
+ ...(Schema.IsThen(schema) ? { then: FromThen(context, schema) } : {}),
231
+ ...(Schema.IsUnevaluatedItems(schema) ? { unevaluatedItems: FromUnevaluatedItems(context, schema) } : {}),
232
+ ...(Schema.IsUnevaluatedProperties(schema) ? { unevaluatedProperties: FromUnevaluatedProperties(context, schema) } : {})
233
+ };
234
+ context.resolving.delete(schema);
235
+ // Discard resolution keywords and finalize the interned schema
236
+ const interned = Memory.Discard(Memory.Assign(schema, remapped), ['$id', '$defs', '$anchor', '$dynamicAnchor', '$recursionAnchor']);
237
+ const key = reservation.used ? reservation.key : HashKey(interned);
238
+ registry.set(key, interned);
239
+ // Result
240
+ const result = { $ref: `#/$defs/${key}` };
241
+ resolved.set(schema, result);
242
+ return result;
243
+ }
244
+ // ----------------------------------------------------------------
245
+ // SchemaBoolean
246
+ // ----------------------------------------------------------------
247
+ function FromSchemaBoolean(_context, schema) {
248
+ // Finalize and register the result
249
+ const key = HashKey(schema);
250
+ registry.set(key, schema);
251
+ // Result
252
+ const result = { $ref: `#/$defs/${key}` };
253
+ resolved.set(schema, result);
254
+ return result;
255
+ }
256
+ // ----------------------------------------------------------------
257
+ // Schema
258
+ // ----------------------------------------------------------------
259
+ function FromSchema(context, schema) {
260
+ const next = { ...context, stack: Stack.NextStack(context.stack, schema) };
261
+ return Schema.IsSchemaBoolean(schema) ? FromSchemaBoolean(next, schema) : FromSchemaObject(next, schema);
262
+ }
263
+ // ----------------------------------------------------------------
264
+ // BooleanEntry
265
+ // ----------------------------------------------------------------
266
+ function BooleanEntry(schema) {
267
+ const key = HashKey(schema);
268
+ return { $ref: `#/$defs/${key}`, $defs: { [key]: schema } };
269
+ }
270
+ // ----------------------------------------------------------------
271
+ // Module-level accumulator state
272
+ // ----------------------------------------------------------------
273
+ const registry = new Map();
274
+ const resolved = new Map();
275
+ /** (Experimental) This function restructures the schema such that each distinct sub-schema is stored exactly once in a $defs object and keyed by content hash. */
276
+ export function Intern(...args) {
277
+ const [context, schema] = Arguments.Match(args, {
278
+ 2: (context, schema) => [context, schema],
279
+ 1: (schema) => [{}, schema]
280
+ });
281
+ registry.clear();
282
+ resolved.clear();
283
+ if (Schema.IsSchemaBoolean(schema))
284
+ return BooleanEntry(schema);
285
+ const defs = Schema.IsDefs(schema) ? schema.$defs : {};
286
+ const rootStack = Stack.Stack({ ...context, ...defs }, schema);
287
+ const { schema: entry, stack } = Schema.IsRef(schema) ? ResolveRef(Stack.NextStack(rootStack, schema), schema.$ref) : { schema, stack: rootStack };
288
+ if (Schema.IsSchemaBoolean(entry))
289
+ return BooleanEntry(entry);
290
+ const ref_context = { stack, resolving: new Map() };
291
+ const result = FromSchema(ref_context, entry);
292
+ return { $ref: result.$ref, $defs: Object.fromEntries(registry) };
293
+ }
@@ -0,0 +1,2 @@
1
+ import type { XMetaSchemaObject } from './schema.mjs';
2
+ export declare const Draft_2019_09: XMetaSchemaObject;