@databehave/server 0.1.4 → 0.3.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 (156) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/README.md +85 -83
  3. package/dist/cors.d.ts +1 -1
  4. package/dist/cors.js +1 -1
  5. package/dist/cors.js.map +1 -1
  6. package/dist/http.d.ts +94 -0
  7. package/dist/http.d.ts.map +1 -0
  8. package/dist/http.js +23 -0
  9. package/dist/http.js.map +1 -0
  10. package/dist/index.d.ts +10 -20
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +8 -18
  13. package/dist/index.js.map +1 -1
  14. package/dist/log.d.ts +9 -49
  15. package/dist/log.d.ts.map +1 -1
  16. package/dist/log.js +16 -92
  17. package/dist/log.js.map +1 -1
  18. package/dist/node-authority.d.ts +12 -0
  19. package/dist/node-authority.d.ts.map +1 -0
  20. package/dist/node-authority.js +72 -0
  21. package/dist/node-authority.js.map +1 -0
  22. package/dist/node-body.d.ts +11 -0
  23. package/dist/node-body.d.ts.map +1 -0
  24. package/dist/node-body.js +61 -0
  25. package/dist/node-body.js.map +1 -0
  26. package/dist/node-http.d.ts +19 -0
  27. package/dist/node-http.d.ts.map +1 -0
  28. package/dist/node-http.js +210 -0
  29. package/dist/node-http.js.map +1 -0
  30. package/dist/plugins/access-log.d.ts +11 -0
  31. package/dist/plugins/access-log.d.ts.map +1 -0
  32. package/dist/plugins/access-log.js +27 -0
  33. package/dist/plugins/access-log.js.map +1 -0
  34. package/dist/plugins/cors.d.ts +5 -0
  35. package/dist/plugins/cors.d.ts.map +1 -0
  36. package/dist/plugins/cors.js +35 -0
  37. package/dist/plugins/cors.js.map +1 -0
  38. package/dist/plugins/routes.d.ts +5 -0
  39. package/dist/plugins/routes.d.ts.map +1 -0
  40. package/dist/plugins/routes.js +10 -0
  41. package/dist/plugins/routes.js.map +1 -0
  42. package/dist/request.d.ts +2 -2
  43. package/dist/request.d.ts.map +1 -1
  44. package/dist/request.js +6 -4
  45. package/dist/request.js.map +1 -1
  46. package/dist/route-key.d.ts +2 -0
  47. package/dist/route-key.d.ts.map +1 -1
  48. package/dist/route-key.js +5 -1
  49. package/dist/route-key.js.map +1 -1
  50. package/dist/server.d.ts +7 -59
  51. package/dist/server.d.ts.map +1 -1
  52. package/dist/server.js +289 -466
  53. package/dist/server.js.map +1 -1
  54. package/dist/types.d.ts +10 -156
  55. package/dist/types.d.ts.map +1 -1
  56. package/dist/types.js +1 -1
  57. package/package.json +11 -24
  58. package/dist/admin/admin-routes.d.ts +0 -42
  59. package/dist/admin/admin-routes.d.ts.map +0 -1
  60. package/dist/admin/admin-routes.js +0 -472
  61. package/dist/admin/admin-routes.js.map +0 -1
  62. package/dist/admin/admin-types.d.ts +0 -170
  63. package/dist/admin/admin-types.d.ts.map +0 -1
  64. package/dist/admin/admin-types.js +0 -30
  65. package/dist/admin/admin-types.js.map +0 -1
  66. package/dist/admin/banner.d.ts +0 -11
  67. package/dist/admin/banner.d.ts.map +0 -1
  68. package/dist/admin/banner.js +0 -5
  69. package/dist/admin/banner.js.map +0 -1
  70. package/dist/admin/header-parser.d.ts +0 -14
  71. package/dist/admin/header-parser.d.ts.map +0 -1
  72. package/dist/admin/header-parser.js +0 -171
  73. package/dist/admin/header-parser.js.map +0 -1
  74. package/dist/admin/inject.d.ts +0 -48
  75. package/dist/admin/inject.d.ts.map +0 -1
  76. package/dist/admin/inject.js +0 -167
  77. package/dist/admin/inject.js.map +0 -1
  78. package/dist/admin/overrides-store.d.ts +0 -18
  79. package/dist/admin/overrides-store.d.ts.map +0 -1
  80. package/dist/admin/overrides-store.js +0 -100
  81. package/dist/admin/overrides-store.js.map +0 -1
  82. package/dist/admin/resolve-cors.d.ts +0 -22
  83. package/dist/admin/resolve-cors.d.ts.map +0 -1
  84. package/dist/admin/resolve-cors.js +0 -28
  85. package/dist/admin/resolve-cors.js.map +0 -1
  86. package/dist/admin/scenarios-store.d.ts +0 -15
  87. package/dist/admin/scenarios-store.d.ts.map +0 -1
  88. package/dist/admin/scenarios-store.js +0 -109
  89. package/dist/admin/scenarios-store.js.map +0 -1
  90. package/dist/admin/ui.css +0 -1
  91. package/dist/admin/ui.html +0 -13
  92. package/dist/admin/ui.js +0 -240
  93. package/dist/bin-helpers.d.ts +0 -46
  94. package/dist/bin-helpers.d.ts.map +0 -1
  95. package/dist/bin-helpers.js +0 -61
  96. package/dist/bin-helpers.js.map +0 -1
  97. package/dist/bin.d.ts +0 -3
  98. package/dist/bin.d.ts.map +0 -1
  99. package/dist/bin.js +0 -86
  100. package/dist/bin.js.map +0 -1
  101. package/dist/define.d.ts +0 -26
  102. package/dist/define.d.ts.map +0 -1
  103. package/dist/define.js +0 -55
  104. package/dist/define.js.map +0 -1
  105. package/dist/json-config.d.ts +0 -170
  106. package/dist/json-config.d.ts.map +0 -1
  107. package/dist/json-config.js +0 -684
  108. package/dist/json-config.js.map +0 -1
  109. package/dist/jsonc.d.ts +0 -24
  110. package/dist/jsonc.d.ts.map +0 -1
  111. package/dist/jsonc.js +0 -125
  112. package/dist/jsonc.js.map +0 -1
  113. package/dist/middleware/request-validation.d.ts +0 -58
  114. package/dist/middleware/request-validation.d.ts.map +0 -1
  115. package/dist/middleware/request-validation.js +0 -328
  116. package/dist/middleware/request-validation.js.map +0 -1
  117. package/dist/mock-mode.d.ts +0 -95
  118. package/dist/mock-mode.d.ts.map +0 -1
  119. package/dist/mock-mode.js +0 -95
  120. package/dist/mock-mode.js.map +0 -1
  121. package/dist/openapi/auto-schema.d.ts +0 -83
  122. package/dist/openapi/auto-schema.d.ts.map +0 -1
  123. package/dist/openapi/auto-schema.js +0 -232
  124. package/dist/openapi/auto-schema.js.map +0 -1
  125. package/dist/openapi/generate.d.ts +0 -20
  126. package/dist/openapi/generate.d.ts.map +0 -1
  127. package/dist/openapi/generate.js +0 -121
  128. package/dist/openapi/generate.js.map +0 -1
  129. package/dist/openapi/loader.d.ts +0 -18
  130. package/dist/openapi/loader.d.ts.map +0 -1
  131. package/dist/openapi/loader.js +0 -25
  132. package/dist/openapi/loader.js.map +0 -1
  133. package/dist/openapi/register.d.ts +0 -58
  134. package/dist/openapi/register.d.ts.map +0 -1
  135. package/dist/openapi/register.js +0 -166
  136. package/dist/openapi/register.js.map +0 -1
  137. package/dist/openapi/seed.d.ts +0 -16
  138. package/dist/openapi/seed.d.ts.map +0 -1
  139. package/dist/openapi/seed.js +0 -58
  140. package/dist/openapi/seed.js.map +0 -1
  141. package/dist/openapi/translate.d.ts +0 -55
  142. package/dist/openapi/translate.d.ts.map +0 -1
  143. package/dist/openapi/translate.js +0 -319
  144. package/dist/openapi/translate.js.map +0 -1
  145. package/dist/openapi/walker.d.ts +0 -44
  146. package/dist/openapi/walker.d.ts.map +0 -1
  147. package/dist/openapi/walker.js +0 -15
  148. package/dist/openapi/walker.js.map +0 -1
  149. package/dist/run.d.ts +0 -27
  150. package/dist/run.d.ts.map +0 -1
  151. package/dist/run.js +0 -87
  152. package/dist/run.js.map +0 -1
  153. package/dist/validation/validate.d.ts +0 -38
  154. package/dist/validation/validate.d.ts.map +0 -1
  155. package/dist/validation/validate.js +0 -372
  156. package/dist/validation/validate.js.map +0 -1
@@ -1,372 +0,0 @@
1
- const DEPTH_CAP = 64;
2
- const PATTERN_MAX_LENGTH = 1024;
3
- // Maximum recursion depth for deepEqual when comparing user input against
4
- // `enum` choices. Beyond this we return false (treat as not-equal — the
5
- // input fails the enum check and the caller emits a 422). The cap exists
6
- // to prevent stack overflow on attacker-supplied deeply-nested values.
7
- const DEEP_EQUAL_DEPTH_CAP = 64;
8
- const POLLUTED_KEYS = new Set([
9
- '__proto__', 'constructor', 'prototype',
10
- ]);
11
- const UNSUPPORTED_KEYWORDS = new Set([
12
- 'if', 'then', 'else',
13
- 'dependentSchemas', 'dependentRequired',
14
- 'unevaluatedProperties', 'unevaluatedItems',
15
- 'contentEncoding', 'contentMediaType',
16
- 'propertyNames', 'patternProperties',
17
- ]);
18
- const FORMAT_DATE = /^\d{4}-\d{2}-\d{2}$/;
19
- const FORMAT_DATE_TIME = /^\d{4}-\d{2}-\d{2}[Tt]\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:[Zz]|[+-]\d{2}:\d{2})$/;
20
- const FORMAT_UUID = /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/;
21
- // Deliberately simple sane-default email regex. RFC 5322 is far stricter
22
- // and rejects edge cases real users care about; consumers who need
23
- // RFC 5322 should add a `pattern` to the schema and rely on the walker's
24
- // `pattern` keyword instead.
25
- const FORMAT_EMAIL = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
26
- const isObj = (v) => typeof v === 'object' && v !== null && !Array.isArray(v);
27
- const deepEqual = (a, b, depth = 0) => {
28
- if (depth > DEEP_EQUAL_DEPTH_CAP)
29
- return false;
30
- if (a === b)
31
- return true;
32
- if (typeof a !== typeof b || a === null || b === null)
33
- return false;
34
- if (Array.isArray(a)) {
35
- if (!Array.isArray(b) || a.length !== b.length)
36
- return false;
37
- for (let i = 0; i < a.length; i++) {
38
- if (!deepEqual(a[i], b[i], depth + 1))
39
- return false;
40
- }
41
- return true;
42
- }
43
- if (typeof a === 'object') {
44
- const ao = a;
45
- const bo = b;
46
- const ak = Object.keys(ao);
47
- if (ak.length !== Object.keys(bo).length)
48
- return false;
49
- for (const k of ak) {
50
- if (!Object.hasOwn(bo, k) || !deepEqual(ao[k], bo[k], depth + 1))
51
- return false;
52
- }
53
- return true;
54
- }
55
- return false;
56
- };
57
- const buildErr = (ctx, message) => new Error(`@databehave/server/validation: ${message} (at ${ctx.schemaPointer})`);
58
- const enterPtr = (ctx, segment) => ({
59
- ...ctx,
60
- schemaPointer: `${ctx.schemaPointer}/${segment}`,
61
- depth: ctx.depth + 1,
62
- });
63
- const resolveRef = (ref, ctx) => {
64
- if (ref.includes('://'))
65
- throw buildErr(ctx, `unsupported $ref: ${ref}`);
66
- const m = /^#\/components\/schemas\/(.+)$/.exec(ref);
67
- if (!m)
68
- throw buildErr(ctx, `unsupported $ref: ${ref}`);
69
- const name = decodeURIComponent(m[1]);
70
- const target = ctx.doc.components?.schemas?.[name];
71
- if (!target)
72
- throw buildErr(ctx, `$ref not found: ${ref}`);
73
- return target;
74
- };
75
- const checkFormat = (f, v) => {
76
- switch (f) {
77
- case 'date': return FORMAT_DATE.test(v) && !Number.isNaN(Date.parse(`${v}T00:00:00Z`));
78
- case 'date-time': return FORMAT_DATE_TIME.test(v) && !Number.isNaN(Date.parse(v));
79
- case 'email': return FORMAT_EMAIL.test(v);
80
- case 'uuid': return FORMAT_UUID.test(v);
81
- case 'uri': try {
82
- new URL(v);
83
- return true;
84
- }
85
- catch {
86
- return false;
87
- }
88
- default: return true;
89
- }
90
- };
91
- const typeOk = (t, value) => {
92
- switch (t) {
93
- case 'string': return typeof value === 'string';
94
- case 'integer': return typeof value === 'number' && Number.isInteger(value);
95
- case 'number': return typeof value === 'number' && !Number.isNaN(value);
96
- case 'boolean': return typeof value === 'boolean';
97
- case 'null': return value === null;
98
- case 'array': return Array.isArray(value);
99
- case 'object': return isObj(value);
100
- default: return true;
101
- }
102
- };
103
- const NUMERIC = [
104
- ['minimum', (v, l) => v >= l, 'is less than minimum'],
105
- ['maximum', (v, l) => v <= l, 'is greater than maximum'],
106
- ['exclusiveMinimum', (v, l) => v > l, 'is not greater than exclusiveMinimum'],
107
- ['exclusiveMaximum', (v, l) => v < l, 'is not less than exclusiveMaximum'],
108
- ];
109
- export const compileValidator = (node, doc, schemaPointer = '#') => build(node, { doc, refStack: [], depth: 0, schemaPointer });
110
- const build = (node, ctx) => {
111
- if (ctx.depth > DEPTH_CAP) {
112
- throw buildErr(ctx, `schema nesting exceeds depth cap of ${DEPTH_CAP}`);
113
- }
114
- if (!isObj(node))
115
- throw buildErr(ctx, 'schema node must be an object');
116
- for (const key of Object.keys(node)) {
117
- if (UNSUPPORTED_KEYWORDS.has(key)) {
118
- throw buildErr(ctx, `unsupported JSON Schema keyword: ${key}`);
119
- }
120
- }
121
- if (typeof node.$ref === 'string') {
122
- if (ctx.refStack.includes(node.$ref)) {
123
- throw buildErr(ctx, `$ref cycle detected: ${[...ctx.refStack, node.$ref].join(' -> ')}`);
124
- }
125
- const target = resolveRef(node.$ref, ctx);
126
- return build(target, {
127
- doc: ctx.doc,
128
- refStack: [...ctx.refStack, node.$ref],
129
- depth: ctx.depth + 1,
130
- schemaPointer: node.$ref,
131
- });
132
- }
133
- const typeArray = Array.isArray(node.type) ? node.type : null;
134
- const allowsNull = node.nullable === true ||
135
- (typeArray !== null && typeArray.includes('null'));
136
- const checks = [];
137
- if (typeof node.type === 'string') {
138
- const t = node.type;
139
- checks.push((v, p) => (v === null && allowsNull) || typeOk(t, v)
140
- ? []
141
- : [{ path: p, keyword: 'type', message: `expected ${t}` }]);
142
- }
143
- else if (typeArray) {
144
- const nonNull = typeArray.filter((t) => t !== 'null');
145
- if (nonNull.length > 0) {
146
- checks.push((v, p) => {
147
- if (v === null && allowsNull)
148
- return [];
149
- for (const t of nonNull)
150
- if (typeOk(t, v))
151
- return [];
152
- return [{ path: p, keyword: 'type', message: `value did not match any of the allowed types: ${nonNull.join(', ')}` }];
153
- });
154
- }
155
- }
156
- if (Array.isArray(node.enum)) {
157
- const choices = node.enum;
158
- checks.push((v, p) => choices.some((c) => deepEqual(v, c))
159
- ? []
160
- : [{ path: p, keyword: 'enum', message: 'value is not one of the allowed enum entries' }]);
161
- }
162
- if (typeof node.minLength === 'number') {
163
- const m = node.minLength;
164
- checks.push((v, p) => typeof v === 'string' && [...v].length < m
165
- ? [{ path: p, keyword: 'minLength', message: `string is shorter than minLength ${m}` }]
166
- : []);
167
- }
168
- if (typeof node.maxLength === 'number') {
169
- const m = node.maxLength;
170
- checks.push((v, p) => typeof v === 'string' && [...v].length > m
171
- ? [{ path: p, keyword: 'maxLength', message: `string is longer than maxLength ${m}` }]
172
- : []);
173
- }
174
- if (typeof node.pattern === 'string') {
175
- const pattern = node.pattern;
176
- if (pattern.length > PATTERN_MAX_LENGTH) {
177
- throw buildErr(ctx, `pattern length ${pattern.length} exceeds cap of ${PATTERN_MAX_LENGTH} (ReDoS guard)`);
178
- }
179
- // FAIL LOUD: a `pattern` without an own `maxLength` is a ReDoS
180
- // footgun — even with `PATTERN_MAX_LENGTH` capping the regex itself,
181
- // catastrophic-backtracking patterns can still be triggered by
182
- // unbounded user input. Force schema authors to declare an upper
183
- // bound at the same node where the `pattern` lives. We deliberately
184
- // do NOT walk up parent schemas: the cap belongs next to the
185
- // pattern, not somewhere ambient.
186
- if (typeof node.maxLength !== 'number') {
187
- throw buildErr(ctx, `pattern requires maxLength on the same schema (footgun: ReDoS) at ${ctx.schemaPointer}`);
188
- }
189
- let re;
190
- try {
191
- re = new RegExp(pattern);
192
- }
193
- catch (err) {
194
- throw buildErr(ctx, `invalid pattern: ${err instanceof Error ? err.message : String(err)}`);
195
- }
196
- checks.push((v, p) => typeof v === 'string' && !re.test(v)
197
- ? [{ path: p, keyword: 'pattern', message: 'string does not match the required pattern' }]
198
- : []);
199
- }
200
- if (typeof node.format === 'string') {
201
- const f = node.format;
202
- if (f === 'date' || f === 'date-time' || f === 'email' || f === 'uuid' || f === 'uri') {
203
- checks.push((v, p) => typeof v === 'string' && !checkFormat(f, v)
204
- ? [{ path: p, keyword: 'format', message: `must be a valid ${f}` }]
205
- : []);
206
- }
207
- }
208
- for (const [key, op, label] of NUMERIC) {
209
- const limit = node[key];
210
- if (typeof limit === 'number') {
211
- checks.push((v, p) => typeof v === 'number' && !op(v, limit)
212
- ? [{ path: p, keyword: key, message: `value ${label} ${limit}` }]
213
- : []);
214
- }
215
- }
216
- if (typeof node.minItems === 'number') {
217
- const m = node.minItems;
218
- checks.push((v, p) => Array.isArray(v) && v.length < m
219
- ? [{ path: p, keyword: 'minItems', message: `array has fewer than ${m} items` }]
220
- : []);
221
- }
222
- if (typeof node.maxItems === 'number') {
223
- const m = node.maxItems;
224
- checks.push((v, p) => Array.isArray(v) && v.length > m
225
- ? [{ path: p, keyword: 'maxItems', message: `array has more than ${m} items` }]
226
- : []);
227
- }
228
- if (node.items) {
229
- const inner = build(node.items, enterPtr(ctx, 'items'));
230
- checks.push((v, p) => {
231
- if (!Array.isArray(v))
232
- return [];
233
- const out = [];
234
- for (let i = 0; i < v.length; i++)
235
- out.push(...inner(v[i], `${p}/${i}`));
236
- return out;
237
- });
238
- }
239
- const required = Array.isArray(node.required) ? node.required : null;
240
- const properties = isObj(node.properties) ? node.properties : null;
241
- const additional = node.additionalProperties;
242
- let propValidators = null;
243
- if (properties) {
244
- propValidators = new Map();
245
- for (const [k, v] of Object.entries(properties)) {
246
- if (POLLUTED_KEYS.has(k)) {
247
- throw buildErr(ctx, `forbidden property name in schema.properties: ${k}`);
248
- }
249
- propValidators.set(k, build(v, enterPtr(ctx, `properties/${k}`)));
250
- }
251
- }
252
- let additionalValidator = null;
253
- let additionalAllowed = true;
254
- if (additional === false)
255
- additionalAllowed = false;
256
- else if (isObj(additional)) {
257
- additionalValidator = build(additional, enterPtr(ctx, 'additionalProperties'));
258
- }
259
- if (required || properties || additional !== undefined) {
260
- checks.push((v, p) => {
261
- if (!isObj(v))
262
- return [];
263
- const out = [];
264
- const ownKeys = Object.keys(v);
265
- for (const k of ownKeys) {
266
- if (POLLUTED_KEYS.has(k)) {
267
- out.push({ path: `${p}/${k}`, keyword: 'prototypePollution', message: 'forbidden property name (prototype pollution guard)' });
268
- }
269
- }
270
- if (required) {
271
- for (const r of required) {
272
- if (!Object.hasOwn(v, r)) {
273
- out.push({ path: `${p}/${r}`, keyword: 'required', message: 'missing required property' });
274
- }
275
- }
276
- }
277
- for (const k of ownKeys) {
278
- if (POLLUTED_KEYS.has(k))
279
- continue;
280
- const child = propValidators?.get(k);
281
- if (child) {
282
- out.push(...child(v[k], `${p}/${k}`));
283
- continue;
284
- }
285
- if (!additionalAllowed) {
286
- out.push({ path: `${p}/${k}`, keyword: 'additionalProperties', message: 'unexpected additional property' });
287
- continue;
288
- }
289
- if (additionalValidator)
290
- out.push(...additionalValidator(v[k], `${p}/${k}`));
291
- }
292
- return out;
293
- });
294
- }
295
- if (Array.isArray(node.allOf)) {
296
- const subs = node.allOf.map((n, i) => build(n, enterPtr(ctx, `allOf/${i}`)));
297
- checks.push((v, p) => subs.flatMap((s) => s(v, p)));
298
- }
299
- if (Array.isArray(node.anyOf)) {
300
- const subs = node.anyOf.map((n, i) => build(n, enterPtr(ctx, `anyOf/${i}`)));
301
- checks.push((v, p) => subs.some((s) => s(v, p).length === 0)
302
- ? []
303
- : [{ path: p, keyword: 'anyOf', message: 'value did not match any of the anyOf schemas' }]);
304
- }
305
- if (Array.isArray(node.oneOf)) {
306
- const subs = node.oneOf.map((n, i) => build(n, enterPtr(ctx, `oneOf/${i}`)));
307
- const disc = node.discriminator;
308
- if (disc) {
309
- const { propertyName, mapping } = disc;
310
- const mapBuilt = new Map();
311
- if (mapping) {
312
- for (const [k, ref] of Object.entries(mapping)) {
313
- const childCtx = enterPtr(ctx, `discriminator/mapping/${k}`);
314
- // Defensive: any structural $ref cycle is caught at the
315
- // top-level $ref descent above before the discriminator
316
- // block runs.
317
- /* c8 ignore start */
318
- if (childCtx.refStack.includes(ref)) {
319
- throw buildErr(childCtx, `$ref cycle detected: ${ref}`);
320
- }
321
- /* c8 ignore stop */
322
- const target = resolveRef(ref, childCtx);
323
- mapBuilt.set(k, build(target, {
324
- ...childCtx,
325
- refStack: [...childCtx.refStack, ref],
326
- schemaPointer: ref,
327
- }));
328
- }
329
- }
330
- checks.push((v, p) => {
331
- if (!isObj(v)) {
332
- return [{ path: p, keyword: 'discriminator', message: `value must be an object to use discriminator '${propertyName}'` }];
333
- }
334
- const tag = v[propertyName];
335
- if (typeof tag !== 'string') {
336
- return [{ path: `${p}/${propertyName}`, keyword: 'discriminator', message: `discriminator '${propertyName}' missing or not a string` }];
337
- }
338
- const sub = mapBuilt.get(tag);
339
- if (sub)
340
- return sub(v, p);
341
- const matches = subs.filter((s) => s(v, p).length === 0);
342
- if (matches.length === 1)
343
- return [];
344
- // Never echo the user-supplied tag — it is unsanitised input
345
- // and ends up rendered in client error toasts / logs.
346
- return [{ path: `${p}/${propertyName}`, keyword: 'discriminator', message: `unknown discriminator value '[redacted]'` }];
347
- });
348
- }
349
- else {
350
- checks.push((v, p) => {
351
- let passing = 0;
352
- for (const s of subs)
353
- if (s(v, p).length === 0)
354
- passing++;
355
- if (passing === 1)
356
- return [];
357
- if (passing === 0)
358
- return [{ path: p, keyword: 'oneOf', message: 'value did not match any of the oneOf schemas' }];
359
- return [{ path: p, keyword: 'oneOf', message: `value matched ${passing} oneOf schemas (must match exactly one)` }];
360
- });
361
- }
362
- }
363
- return (value, pointer) => {
364
- if (value === null && allowsNull)
365
- return [];
366
- const out = [];
367
- for (const c of checks)
368
- out.push(...c(value, pointer));
369
- return out;
370
- };
371
- };
372
- //# sourceMappingURL=validate.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/validation/validate.ts"],"names":[],"mappings":"AAuCA,MAAM,SAAS,GAAG,EAAE,CAAA;AACpB,MAAM,kBAAkB,GAAG,IAAI,CAAA;AAC/B,0EAA0E;AAC1E,wEAAwE;AACxE,yEAAyE;AACzE,uEAAuE;AACvE,MAAM,oBAAoB,GAAG,EAAE,CAAA;AAE/B,MAAM,aAAa,GAAwB,IAAI,GAAG,CAAC;IACjD,WAAW,EAAE,aAAa,EAAE,WAAW;CACxC,CAAC,CAAA;AAEF,MAAM,oBAAoB,GAAwB,IAAI,GAAG,CAAC;IACxD,IAAI,EAAE,MAAM,EAAE,MAAM;IACpB,kBAAkB,EAAE,mBAAmB;IACvC,uBAAuB,EAAE,kBAAkB;IAC3C,iBAAiB,EAAE,kBAAkB;IACrC,eAAe,EAAE,mBAAmB;CACrC,CAAC,CAAA;AAEF,MAAM,WAAW,GAAG,qBAAqB,CAAA;AACzC,MAAM,gBAAgB,GACpB,4EAA4E,CAAA;AAC9E,MAAM,WAAW,GACf,+EAA+E,CAAA;AACjF,yEAAyE;AACzE,mEAAmE;AACnE,yEAAyE;AACzE,6BAA6B;AAC7B,MAAM,YAAY,GAAG,4BAA4B,CAAA;AAEjD,MAAM,KAAK,GAAG,CAAC,CAAU,EAAgC,EAAE,CACzD,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;AAE1D,MAAM,SAAS,GAAG,CAAC,CAAU,EAAE,CAAU,EAAE,KAAK,GAAG,CAAC,EAAW,EAAE;IAC/D,IAAI,KAAK,GAAG,oBAAoB;QAAE,OAAO,KAAK,CAAA;IAC9C,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IACxB,IAAI,OAAO,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI;QAAE,OAAO,KAAK,CAAA;IACnE,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QACrB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;YAAE,OAAO,KAAK,CAAA;QAC5D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAClC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC;gBAAE,OAAO,KAAK,CAAA;QACrD,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IACD,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;QAC1B,MAAM,EAAE,GAAG,CAA4B,CAAA;QACvC,MAAM,EAAE,GAAG,CAA4B,CAAA;QACvC,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAC1B,IAAI,EAAE,CAAC,MAAM,KAAK,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,MAAM;YAAE,OAAO,KAAK,CAAA;QACtD,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;YACnB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC;gBAAE,OAAO,KAAK,CAAA;QAChF,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC,CAAA;AASD,MAAM,QAAQ,GAAG,CAAC,GAAa,EAAE,OAAe,EAAS,EAAE,CACzD,IAAI,KAAK,CAAC,kCAAkC,OAAO,QAAQ,GAAG,CAAC,aAAa,GAAG,CAAC,CAAA;AAElF,MAAM,QAAQ,GAAG,CAAC,GAAa,EAAE,OAAe,EAAY,EAAE,CAAC,CAAC;IAC9D,GAAG,GAAG;IACN,aAAa,EAAE,GAAG,GAAG,CAAC,aAAa,IAAI,OAAO,EAAE;IAChD,KAAK,EAAE,GAAG,CAAC,KAAK,GAAG,CAAC;CACrB,CAAC,CAAA;AAEF,MAAM,UAAU,GAAG,CAAC,GAAW,EAAE,GAAa,EAAW,EAAE;IACzD,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,MAAM,QAAQ,CAAC,GAAG,EAAE,qBAAqB,GAAG,EAAE,CAAC,CAAA;IACxE,MAAM,CAAC,GAAG,gCAAgC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACpD,IAAI,CAAC,CAAC;QAAE,MAAM,QAAQ,CAAC,GAAG,EAAE,qBAAqB,GAAG,EAAE,CAAC,CAAA;IACvD,MAAM,IAAI,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,CAAA;IACtC,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,EAAE,CAAC,IAAI,CAAC,CAAA;IAClD,IAAI,CAAC,MAAM;QAAE,MAAM,QAAQ,CAAC,GAAG,EAAE,mBAAmB,GAAG,EAAE,CAAC,CAAA;IAC1D,OAAO,MAAM,CAAA;AACf,CAAC,CAAA;AAED,MAAM,WAAW,GAAG,CAAC,CAAS,EAAE,CAAS,EAAW,EAAE;IACpD,QAAQ,CAAC,EAAE,CAAC;QACV,KAAK,MAAM,CAAC,CAAC,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAA;QACtF,KAAK,WAAW,CAAC,CAAC,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;QACjF,KAAK,OAAO,CAAC,CAAC,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACzC,KAAK,MAAM,CAAC,CAAC,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACvC,KAAK,KAAK,CAAC,CAAC,IAAI,CAAC;YAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;YAAC,OAAO,IAAI,CAAA;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,OAAO,KAAK,CAAA;QAAC,CAAC;QAClE,OAAO,CAAC,CAAC,OAAO,IAAI,CAAA;IACtB,CAAC;AACH,CAAC,CAAA;AAED,MAAM,MAAM,GAAG,CAAC,CAAS,EAAE,KAAc,EAAW,EAAE;IACpD,QAAQ,CAAC,EAAE,CAAC;QACV,KAAK,QAAQ,CAAC,CAAC,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAA;QAC/C,KAAK,SAAS,CAAC,CAAC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;QAC3E,KAAK,QAAQ,CAAC,CAAC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QACvE,KAAK,SAAS,CAAC,CAAC,OAAO,OAAO,KAAK,KAAK,SAAS,CAAA;QACjD,KAAK,MAAM,CAAC,CAAC,OAAO,KAAK,KAAK,IAAI,CAAA;QAClC,KAAK,OAAO,CAAC,CAAC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QACzC,KAAK,QAAQ,CAAC,CAAC,OAAO,KAAK,CAAC,KAAK,CAAC,CAAA;QAClC,OAAO,CAAC,CAAC,OAAO,IAAI,CAAA;IACtB,CAAC;AACH,CAAC,CAAA;AAED,MAAM,OAAO,GAAuE;IAClF,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,sBAAsB,CAAC;IACrD,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,yBAAyB,CAAC;IACxD,CAAC,kBAAkB,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,sCAAsC,CAAC;IAC7E,CAAC,kBAAkB,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,mCAAmC,CAAC;CAC3E,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,IAAa,EACb,GAAW,EACX,aAAa,GAAG,GAAG,EACR,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,CAAA;AAE3E,MAAM,KAAK,GAAG,CAAC,IAAa,EAAE,GAAa,EAAa,EAAE;IACxD,IAAI,GAAG,CAAC,KAAK,GAAG,SAAS,EAAE,CAAC;QAC1B,MAAM,QAAQ,CAAC,GAAG,EAAE,uCAAuC,SAAS,EAAE,CAAC,CAAA;IACzE,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;QAAE,MAAM,QAAQ,CAAC,GAAG,EAAE,+BAA+B,CAAC,CAAA;IAEtE,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACpC,IAAI,oBAAoB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAClC,MAAM,QAAQ,CAAC,GAAG,EAAE,oCAAoC,GAAG,EAAE,CAAC,CAAA;QAChE,CAAC;IACH,CAAC;IAED,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAClC,IAAI,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACrC,MAAM,QAAQ,CAAC,GAAG,EAAE,wBAAwB,CAAC,GAAG,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QAC1F,CAAC;QACD,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;QACzC,OAAO,KAAK,CAAC,MAAM,EAAE;YACnB,GAAG,EAAE,GAAG,CAAC,GAAG;YACZ,QAAQ,EAAE,CAAC,GAAG,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC;YACtC,KAAK,EAAE,GAAG,CAAC,KAAK,GAAG,CAAC;YACpB,aAAa,EAAE,IAAI,CAAC,IAAI;SACzB,CAAC,CAAA;IACJ,CAAC;IAED,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAA;IAC7D,MAAM,UAAU,GACd,IAAI,CAAC,QAAQ,KAAK,IAAI;QACtB,CAAC,SAAS,KAAK,IAAI,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAA;IAEpD,MAAM,MAAM,GAAgB,EAAE,CAAA;IAE9B,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAClC,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAA;QACnB,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACnB,CAAC,CAAC,KAAK,IAAI,IAAI,UAAU,CAAC,IAAI,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;YACxC,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,CAAC,EAAE,EAAE,CAAC,CAC7D,CAAA;IACH,CAAC;SAAM,IAAI,SAAS,EAAE,CAAC;QACrB,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,CAAA;QACrD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;gBACnB,IAAI,CAAC,KAAK,IAAI,IAAI,UAAU;oBAAE,OAAO,EAAE,CAAA;gBACvC,KAAK,MAAM,CAAC,IAAI,OAAO;oBAAE,IAAI,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;wBAAE,OAAO,EAAE,CAAA;gBACpD,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,iDAAiD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAA;YACvH,CAAC,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAA;QACzB,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAClC,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,8CAA8C,EAAE,CAAC,CAC5F,CAAA;IACH,CAAC;IAED,IAAI,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;QACvC,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAA;QACxB,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACnB,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC;YACxC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,oCAAoC,CAAC,EAAE,EAAE,CAAC;YACvF,CAAC,CAAC,EAAE,CACP,CAAA;IACH,CAAC;IACD,IAAI,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;QACvC,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAA;QACxB,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACnB,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC;YACxC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,mCAAmC,CAAC,EAAE,EAAE,CAAC;YACtF,CAAC,CAAC,EAAE,CACP,CAAA;IACH,CAAC;IACD,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QACrC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAA;QAC5B,IAAI,OAAO,CAAC,MAAM,GAAG,kBAAkB,EAAE,CAAC;YACxC,MAAM,QAAQ,CAAC,GAAG,EAAE,kBAAkB,OAAO,CAAC,MAAM,mBAAmB,kBAAkB,gBAAgB,CAAC,CAAA;QAC5G,CAAC;QACD,+DAA+D;QAC/D,qEAAqE;QACrE,+DAA+D;QAC/D,iEAAiE;QACjE,oEAAoE;QACpE,6DAA6D;QAC7D,kCAAkC;QAClC,IAAI,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;YACvC,MAAM,QAAQ,CACZ,GAAG,EACH,qEAAqE,GAAG,CAAC,aAAa,EAAE,CACzF,CAAA;QACH,CAAC;QACD,IAAI,EAAU,CAAA;QACd,IAAI,CAAC;YAAC,EAAE,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,CAAA;QAAC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YAC5C,MAAM,QAAQ,CAAC,GAAG,EAAE,oBAAoB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QAC7F,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACnB,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;YAClC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,4CAA4C,EAAE,CAAC;YAC1F,CAAC,CAAC,EAAE,CACP,CAAA;IACH,CAAC;IACD,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QACpC,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAA;QACrB,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,WAAW,IAAI,CAAC,KAAK,OAAO,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,KAAK,EAAE,CAAC;YACtF,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACnB,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC;gBACzC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,mBAAmB,CAAC,EAAE,EAAE,CAAC;gBACnE,CAAC,CAAC,EAAE,CACP,CAAA;QACH,CAAC;IACH,CAAC;IAED,KAAK,MAAM,CAAC,GAAG,EAAE,EAAE,EAAE,KAAK,CAAC,IAAI,OAAO,EAAE,CAAC;QACvC,MAAM,KAAK,GAAI,IAAgC,CAAC,GAAG,CAAC,CAAA;QACpD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACnB,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC;gBACpC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,SAAS,KAAK,IAAI,KAAK,EAAE,EAAE,CAAC;gBACjE,CAAC,CAAC,EAAE,CACP,CAAA;QACH,CAAC;IACH,CAAC;IAED,IAAI,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACtC,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAA;QACvB,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACnB,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC;YAC9B,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,wBAAwB,CAAC,QAAQ,EAAE,CAAC;YAChF,CAAC,CAAC,EAAE,CACP,CAAA;IACH,CAAC;IACD,IAAI,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACtC,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAA;QACvB,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACnB,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC;YAC9B,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,uBAAuB,CAAC,QAAQ,EAAE,CAAC;YAC/E,CAAC,CAAC,EAAE,CACP,CAAA;IACH,CAAC;IACD,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAA;QACvD,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACnB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;gBAAE,OAAO,EAAE,CAAA;YAChC,MAAM,GAAG,GAAgB,EAAE,CAAA;YAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE;gBAAE,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;YACxE,OAAO,GAAG,CAAA;QACZ,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAA;IACpE,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAA;IAClE,MAAM,UAAU,GAAG,IAAI,CAAC,oBAAoB,CAAA;IAC5C,IAAI,cAAc,GAAkC,IAAI,CAAA;IACxD,IAAI,UAAU,EAAE,CAAC;QACf,cAAc,GAAG,IAAI,GAAG,EAAE,CAAA;QAC1B,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;YAChD,IAAI,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzB,MAAM,QAAQ,CAAC,GAAG,EAAE,iDAAiD,CAAC,EAAE,CAAC,CAAA;YAC3E,CAAC;YACD,cAAc,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAY,EAAE,QAAQ,CAAC,GAAG,EAAE,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAC9E,CAAC;IACH,CAAC;IACD,IAAI,mBAAmB,GAAqB,IAAI,CAAA;IAChD,IAAI,iBAAiB,GAAG,IAAI,CAAA;IAC5B,IAAI,UAAU,KAAK,KAAK;QAAE,iBAAiB,GAAG,KAAK,CAAA;SAC9C,IAAI,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,mBAAmB,GAAG,KAAK,CAAC,UAAqB,EAAE,QAAQ,CAAC,GAAG,EAAE,sBAAsB,CAAC,CAAC,CAAA;IAC3F,CAAC;IACD,IAAI,QAAQ,IAAI,UAAU,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QACvD,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACnB,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;gBAAE,OAAO,EAAE,CAAA;YACxB,MAAM,GAAG,GAAgB,EAAE,CAAA;YAC3B,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YAC9B,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;gBACxB,IAAI,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;oBACzB,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,oBAAoB,EAAE,OAAO,EAAE,qDAAqD,EAAE,CAAC,CAAA;gBAChI,CAAC;YACH,CAAC;YACD,IAAI,QAAQ,EAAE,CAAC;gBACb,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;oBACzB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;wBACzB,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,2BAA2B,EAAE,CAAC,CAAA;oBAC5F,CAAC;gBACH,CAAC;YACH,CAAC;YACD,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;gBACxB,IAAI,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;oBAAE,SAAQ;gBAClC,MAAM,KAAK,GAAG,cAAc,EAAE,GAAG,CAAC,CAAC,CAAC,CAAA;gBACpC,IAAI,KAAK,EAAE,CAAC;oBAAC,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;oBAAC,SAAQ;gBAAC,CAAC;gBAC9D,IAAI,CAAC,iBAAiB,EAAE,CAAC;oBACvB,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,sBAAsB,EAAE,OAAO,EAAE,gCAAgC,EAAE,CAAC,CAAA;oBAC3G,SAAQ;gBACV,CAAC;gBACD,IAAI,mBAAmB;oBAAE,GAAG,CAAC,IAAI,CAAC,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;YAC9E,CAAC;YACD,OAAO,GAAG,CAAA;QACZ,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAC5E,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;IACrD,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAC5E,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACnB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;YACpC,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,8CAA8C,EAAE,CAAC,CAC7F,CAAA;IACH,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAC5E,MAAM,IAAI,GAAI,IAAuF,CAAC,aAAa,CAAA;QACnH,IAAI,IAAI,EAAE,CAAC;YACT,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;YACtC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAqB,CAAA;YAC7C,IAAI,OAAO,EAAE,CAAC;gBACZ,KAAK,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC/C,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,EAAE,yBAAyB,CAAC,EAAE,CAAC,CAAA;oBAC5D,wDAAwD;oBACxD,wDAAwD;oBACxD,cAAc;oBACd,qBAAqB;oBACrB,IAAI,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;wBACpC,MAAM,QAAQ,CAAC,QAAQ,EAAE,wBAAwB,GAAG,EAAE,CAAC,CAAA;oBACzD,CAAC;oBACD,oBAAoB;oBACpB,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;oBACxC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,EAAE;wBAC5B,GAAG,QAAQ;wBACX,QAAQ,EAAE,CAAC,GAAG,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC;wBACrC,aAAa,EAAE,GAAG;qBACnB,CAAC,CAAC,CAAA;gBACL,CAAC;YACH,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;gBACnB,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;oBACd,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,iDAAiD,YAAY,GAAG,EAAE,CAAC,CAAA;gBAC3H,CAAC;gBACD,MAAM,GAAG,GAAG,CAAC,CAAC,YAAY,CAAC,CAAA;gBAC3B,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;oBAC5B,OAAO,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,YAAY,EAAE,EAAE,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,kBAAkB,YAAY,2BAA2B,EAAE,CAAC,CAAA;gBACzI,CAAC;gBACD,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;gBAC7B,IAAI,GAAG;oBAAE,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;gBACzB,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CAAA;gBACxD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;oBAAE,OAAO,EAAE,CAAA;gBACnC,6DAA6D;gBAC7D,sDAAsD;gBACtD,OAAO,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,YAAY,EAAE,EAAE,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,0CAA0C,EAAE,CAAC,CAAA;YAC1H,CAAC,CAAC,CAAA;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;gBACnB,IAAI,OAAO,GAAG,CAAC,CAAA;gBACf,KAAK,MAAM,CAAC,IAAI,IAAI;oBAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC;wBAAE,OAAO,EAAE,CAAA;gBACzD,IAAI,OAAO,KAAK,CAAC;oBAAE,OAAO,EAAE,CAAA;gBAC5B,IAAI,OAAO,KAAK,CAAC;oBAAE,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,8CAA8C,EAAE,CAAC,CAAA;gBAClH,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,iBAAiB,OAAO,yCAAyC,EAAE,CAAC,CAAA;YACpH,CAAC,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,IAAI,KAAK,KAAK,IAAI,IAAI,UAAU;YAAE,OAAO,EAAE,CAAA;QAC3C,MAAM,GAAG,GAAgB,EAAE,CAAA;QAC3B,KAAK,MAAM,CAAC,IAAI,MAAM;YAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAA;QACtD,OAAO,GAAG,CAAA;IACZ,CAAC,CAAA;AACH,CAAC,CAAA"}