@openaddresses/batch-schema 10.25.0 → 10.27.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.
@@ -3,11 +3,12 @@ import path from 'node:path';
3
3
  import morgan from 'morgan';
4
4
  import bodyparser from 'body-parser';
5
5
  import Err from '@openaddresses/batch-error';
6
- import { Type } from '@sinclair/typebox';
6
+ import { Kind } from '@sinclair/typebox';
7
7
  import { OpenAPIV3 as Doc } from 'openapi-types';
8
8
  import { Router } from 'express';
9
9
  import { Ajv } from 'ajv';
10
10
  import addFormatsModule from 'ajv-formats';
11
+ import { normalizeBody, matchContentType } from './types.js';
11
12
  import SchemaAPI from './api.js';
12
13
  import Docs from './openapi.js';
13
14
  const ajv = new Ajv({
@@ -18,6 +19,61 @@ const ajv = new Ajv({
18
19
  coerceTypes: true
19
20
  });
20
21
  addFormatsModule.default(ajv);
22
+ const MAX_LOGGED_RESPONSE = 4096;
23
+ /**
24
+ * Deep-clone a value following JSON.stringify semantics: toJSON() support
25
+ * (Date => ISO string), undefined/function/symbol omission, NaN/Infinity
26
+ * => null, and circular reference detection. Response validation needs the
27
+ * serialized shape of the payload (Dates must already be strings), and ajv's
28
+ * removeAdditional/useDefaults mutate the object they validate, so the
29
+ * caller's object must be protected. A single-pass clone does both without
30
+ * the cost of JSON.parse(JSON.stringify()) building an intermediate string.
31
+ */
32
+ function jsonClone(value, seen) {
33
+ if (value !== null && typeof value === 'object' && typeof value.toJSON === 'function') {
34
+ value = value.toJSON();
35
+ }
36
+ if (value === null)
37
+ return null;
38
+ switch (typeof value) {
39
+ case 'string':
40
+ case 'boolean':
41
+ return value;
42
+ case 'number':
43
+ return Number.isFinite(value) ? value : null;
44
+ case 'bigint':
45
+ throw new TypeError('Do not know how to serialize a BigInt');
46
+ case 'object':
47
+ break;
48
+ default:
49
+ return undefined; // undefined | function | symbol are omitted, as in JSON.stringify
50
+ }
51
+ if (!seen)
52
+ seen = new Set();
53
+ if (seen.has(value))
54
+ throw new TypeError('Converting circular structure to JSON');
55
+ seen.add(value);
56
+ let out;
57
+ if (Array.isArray(value)) {
58
+ const arr = new Array(value.length);
59
+ for (let i = 0; i < value.length; i++) {
60
+ const v = jsonClone(value[i], seen);
61
+ arr[i] = v === undefined ? null : v;
62
+ }
63
+ out = arr;
64
+ }
65
+ else {
66
+ const obj = {};
67
+ for (const key of Object.keys(value)) {
68
+ const v = jsonClone(value[key], seen);
69
+ if (v !== undefined)
70
+ obj[key] = v;
71
+ }
72
+ out = obj;
73
+ }
74
+ seen.delete(value);
75
+ return out;
76
+ }
21
77
  /**
22
78
  * @class
23
79
  *
@@ -40,6 +96,58 @@ export default class Schemas {
40
96
  validationError(method, path) {
41
97
  return new Err(400, null, `Validation Error ${String(method).toUpperCase()} ${path}`);
42
98
  }
99
+ /**
100
+ * Compile body validators keyed by content-type. Returns null when no
101
+ * body validation is configured. Each validator entry is either `true`
102
+ * (any body accepted for this content-type) or a compiled ajv validator.
103
+ * The content-type matcher and supported-types error string are
104
+ * precomputed here so no per-request allocation is needed.
105
+ */
106
+ compileBodyValidators(body) {
107
+ const normalized = normalizeBody(body);
108
+ if (!normalized)
109
+ return null;
110
+ const validators = new Map();
111
+ for (const ct of Object.keys(normalized)) {
112
+ const schema = normalized[ct].schema;
113
+ if (schema === true || schema === undefined) {
114
+ validators.set(ct, true);
115
+ }
116
+ else {
117
+ validators.set(ct, ajv.compile(schema));
118
+ }
119
+ }
120
+ return {
121
+ validators,
122
+ matcher: normalized,
123
+ supported: Object.keys(normalized).join(', ')
124
+ };
125
+ }
126
+ /**
127
+ * Validate the incoming request body against the compiled validation
128
+ * state for the route. Pushes a Body error onto `errors` if validation
129
+ * fails; returns an Err to respond with for an unsupported content-type.
130
+ *
131
+ * If `opts.required` is false and the request has no body / no
132
+ * content-type, validation is skipped.
133
+ */
134
+ validateBody(req, compiled, errors, opts = {}) {
135
+ const raw = (req.headers['content-type'] || '').split(';')[0].trim().toLowerCase();
136
+ const required = opts.required !== false;
137
+ if (!raw && !required)
138
+ return null;
139
+ const matched = matchContentType(raw, compiled.matcher);
140
+ const validator = matched ? compiled.validators.get(matched) : undefined;
141
+ if (!validator) {
142
+ return new Err(400, null, `Content-Type ${raw || '(none)'} not supported. Supported: ${compiled.supported}`);
143
+ }
144
+ if (validator !== true) {
145
+ if (!validator(req.body)) {
146
+ errors.push({ type: 'Body', errors: validator.errors });
147
+ }
148
+ }
149
+ return null;
150
+ }
43
151
  constructor(router, opts = {}) {
44
152
  if (!router)
45
153
  throw new Error('Router Param Required');
@@ -49,8 +157,16 @@ export default class Schemas {
49
157
  const morganOptions = opts.logging && typeof opts.logging === 'object' ? opts.logging : {};
50
158
  this.router.use(morgan('combined', morganOptions));
51
159
  }
52
- this.router.use(bodyparser.urlencoded({ extended: true }));
160
+ this.router.use(bodyparser.urlencoded({ extended: true, limit: `${opts.limit || 50}mb` }));
53
161
  this.router.use(bodyparser.json({ limit: `${opts.limit || 50}mb` }));
162
+ this.router.use(bodyparser.text({
163
+ limit: `${opts.limit || 50}mb`,
164
+ type: ['text/*', 'application/xml', 'application/*+xml']
165
+ }));
166
+ this.router.use(bodyparser.raw({
167
+ limit: `${opts.limit || 50}mb`,
168
+ type: ['application/octet-stream']
169
+ }));
54
170
  if (opts.error) {
55
171
  this.error = opts.error;
56
172
  }
@@ -113,16 +229,40 @@ export default class Schemas {
113
229
  console.log(`ok - loaded blueprint`);
114
230
  await bp_fn(this, config);
115
231
  }
116
- async get(path, opts = {}, handler) {
232
+ /**
233
+ * Compile the response validator for a route. Type.Any and Type.Unknown
234
+ * impose no constraints, so they are skipped entirely — routes with an
235
+ * open response schema (or none) bypass response validation and its
236
+ * clone at request time.
237
+ */
238
+ compileResponseValidation(res) {
239
+ if (!res)
240
+ return null;
241
+ if (res[Kind] === 'Any' || res[Kind] === 'Unknown')
242
+ return null;
243
+ return ajv.compile(res);
244
+ }
245
+ /**
246
+ * Shared route registration: compiles all validators once, then installs
247
+ * a request handler that validates params/query/body and — only when a
248
+ * response schema requires it — wraps res.json with response validation.
249
+ */
250
+ route(method, path, opts, handler, allowBody) {
251
+ const methodUpper = String(method).toUpperCase();
117
252
  try {
118
253
  const validation = this.normalizeValidation(opts);
119
- this.docs.push({ method: Doc.HttpMethods.GET, path: path }, validation);
120
- this.schemas.set(`GET ${path}`, validation);
121
- const resValidation = validation.res && !(validation.res instanceof Type.Any) && !(validation.res instanceof Type.Unknown) && ajv.compile(validation.res);
254
+ this.docs.push({ method, path }, validation);
255
+ this.schemas.set(`${methodUpper} ${path}`, validation);
256
+ const resValidation = this.compileResponseValidation(validation.res);
122
257
  const paramsValidation = validation.params && ajv.compile(validation.params);
123
258
  const queryValidation = validation.query && ajv.compile(validation.query);
124
- if (validation.body)
259
+ let bodyValidation = null;
260
+ if (allowBody) {
261
+ bodyValidation = this.compileBodyValidators(validation.body);
262
+ }
263
+ else if (validation.body) {
125
264
  throw new Error(`Body not allowed`);
265
+ }
126
266
  const _handler = (req, res, next) => {
127
267
  if (req.query) { // Ref: https://github.com/cdimascio/express-openapi-validator/issues/969
128
268
  Object.defineProperty(req, 'query', {
@@ -135,206 +275,51 @@ export default class Schemas {
135
275
  errors.push({ type: 'Params', errors: paramsValidation.errors });
136
276
  if (queryValidation && !queryValidation(req.query))
137
277
  errors.push({ type: 'Query', errors: queryValidation.errors });
278
+ if (bodyValidation) {
279
+ const ctErr = this.validateBody(req, bodyValidation, errors, { required: validation.bodyRequired });
280
+ if (ctErr)
281
+ return Err.respond(ctErr, res);
282
+ }
138
283
  if (errors.length)
139
- return Err.respond(this.validationError(Doc.HttpMethods.GET, path), res, errors);
140
- const json = res.json;
141
- res.json = function (obj) {
142
- obj = JSON.parse(JSON.stringify(obj)); // Here as Date => String needs to happen
143
- if ((res.statusCode === null || res.statusCode === 200) && resValidation && !resValidation(obj)) {
144
- res.status(400);
145
- console.error(`Response Validation Error: ${JSON.stringify(obj)}`);
146
- return json.call(this, { type: 'Response', errors: resValidation.errors });
147
- }
148
- else {
284
+ return Err.respond(this.validationError(method, path), res, errors);
285
+ if (resValidation) {
286
+ const json = res.json;
287
+ res.json = function (obj) {
288
+ if (res.statusCode === null || res.statusCode === 200) {
289
+ obj = jsonClone(obj); // Date => String needs to happen before validation
290
+ if (!resValidation(obj)) {
291
+ res.status(400);
292
+ const logged = JSON.stringify(obj);
293
+ console.error(`Response Validation Error: ${methodUpper} ${path}: ${logged && logged.length > MAX_LOGGED_RESPONSE ? logged.slice(0, MAX_LOGGED_RESPONSE) + '... (truncated)' : logged}`);
294
+ return json.call(this, { type: 'Response', errors: resValidation.errors });
295
+ }
296
+ }
149
297
  return json.call(this, obj);
150
- }
151
- };
298
+ };
299
+ }
152
300
  return handler(req, res, next);
153
301
  };
154
- this.router.get(path, _handler);
302
+ this.router[method](path, _handler);
155
303
  }
156
304
  catch (err) {
157
- throw new Error(`Get: ${path}: ` + err, { cause: err });
305
+ const label = methodUpper.charAt(0) + methodUpper.slice(1).toLowerCase();
306
+ throw new Error(`${label}: ${path}: ` + String(err), { cause: err });
158
307
  }
159
308
  }
309
+ async get(path, opts = {}, handler) {
310
+ this.route(Doc.HttpMethods.GET, path, opts, handler, false);
311
+ }
160
312
  async delete(path, opts = {}, handler) {
161
- try {
162
- const validation = this.normalizeValidation(opts);
163
- this.docs.push({ method: Doc.HttpMethods.DELETE, path: path }, validation);
164
- this.schemas.set(`DELETE ${path}`, validation);
165
- const resValidation = validation.res && !(validation.res instanceof Type.Any) && !(validation.res instanceof Type.Unknown) && ajv.compile(validation.res);
166
- const paramsValidation = validation.params && ajv.compile(validation.params);
167
- const queryValidation = validation.query && ajv.compile(validation.query);
168
- if (validation.body)
169
- throw new Error(`Body not allowed`);
170
- const _handler = (req, res, next) => {
171
- if (req.query) { // Ref: https://github.com/cdimascio/express-openapi-validator/issues/969
172
- Object.defineProperty(req, 'query', {
173
- writable: true,
174
- value: { ...req.query },
175
- });
176
- }
177
- const errors = [];
178
- if (paramsValidation && !paramsValidation(req.params))
179
- errors.push({ type: 'Params', errors: paramsValidation.errors });
180
- if (queryValidation && !queryValidation(req.query))
181
- errors.push({ type: 'Query', errors: queryValidation.errors });
182
- if (errors.length)
183
- return Err.respond(this.validationError(Doc.HttpMethods.DELETE, path), res, errors);
184
- const json = res.json;
185
- res.json = function (obj) {
186
- obj = JSON.parse(JSON.stringify(obj)); // Here as Date => String needs to happen
187
- if ((res.statusCode === null || res.statusCode === 200) && resValidation && !resValidation(obj)) {
188
- res.status(400);
189
- console.error(`Response Validation Error: ${JSON.stringify(obj)}`);
190
- return json.call(this, { type: 'Response', errors: resValidation.errors });
191
- }
192
- else {
193
- return json.call(this, obj);
194
- }
195
- };
196
- return handler(req, res, next);
197
- };
198
- this.router.delete(path, _handler);
199
- }
200
- catch (err) {
201
- throw new Error(`Delete: ${path}: ` + String(err), { cause: err });
202
- }
313
+ this.route(Doc.HttpMethods.DELETE, path, opts, handler, false);
203
314
  }
204
315
  async post(path, opts = {}, handler) {
205
- try {
206
- const validation = this.normalizeValidation(opts);
207
- this.docs.push({ method: Doc.HttpMethods.POST, path: path }, validation);
208
- this.schemas.set(`POST ${path}`, validation);
209
- const resValidation = validation.res && !(validation.res instanceof Type.Any) && !(validation.res instanceof Type.Unknown) && ajv.compile(validation.res);
210
- const paramsValidation = validation.params && ajv.compile(validation.params);
211
- const queryValidation = validation.query && ajv.compile(validation.query);
212
- const bodyValidation = validation.body && ajv.compile(validation.body);
213
- const _handler = (req, res, next) => {
214
- if (req.query) { // Ref: https://github.com/cdimascio/express-openapi-validator/issues/969
215
- Object.defineProperty(req, 'query', {
216
- writable: true,
217
- value: { ...req.query },
218
- });
219
- }
220
- const errors = [];
221
- if (paramsValidation && !paramsValidation(req.params))
222
- errors.push({ type: 'Params', errors: paramsValidation.errors });
223
- if (queryValidation && !queryValidation(req.query))
224
- errors.push({ type: 'Query', errors: queryValidation.errors });
225
- if (bodyValidation && !bodyValidation(req.body))
226
- errors.push({ type: 'Body', errors: bodyValidation.errors });
227
- if (errors.length)
228
- return Err.respond(this.validationError(Doc.HttpMethods.POST, path), res, errors);
229
- const json = res.json;
230
- res.json = function (obj) {
231
- obj = JSON.parse(JSON.stringify(obj)); // Here as Date => String needs to happen
232
- if ((res.statusCode === null || res.statusCode === 200) && resValidation && !resValidation(obj)) {
233
- res.status(400);
234
- console.error(`Response Validation Error: ${JSON.stringify(obj)}`);
235
- return json.call(this, { type: 'Response', errors: resValidation.errors });
236
- }
237
- else {
238
- return json.call(this, obj);
239
- }
240
- };
241
- return handler(req, res, next);
242
- };
243
- this.router.post(path, _handler);
244
- }
245
- catch (err) {
246
- throw new Error(`Post: ${path}: ` + String(err), { cause: err });
247
- }
316
+ this.route(Doc.HttpMethods.POST, path, opts, handler, true);
248
317
  }
249
318
  async patch(path, opts = {}, handler) {
250
- try {
251
- const validation = this.normalizeValidation(opts);
252
- this.docs.push({ method: Doc.HttpMethods.PATCH, path: path }, validation);
253
- this.schemas.set(`PATCH ${path}`, validation);
254
- const resValidation = validation.res && !(validation.res instanceof Type.Any) && !(validation.res instanceof Type.Unknown) && ajv.compile(validation.res);
255
- const paramsValidation = validation.params && ajv.compile(validation.params);
256
- const queryValidation = validation.query && ajv.compile(validation.query);
257
- const bodyValidation = validation.body && ajv.compile(validation.body);
258
- const _handler = (req, res, next) => {
259
- if (req.query) { // Ref: https://github.com/cdimascio/express-openapi-validator/issues/969
260
- Object.defineProperty(req, 'query', {
261
- writable: true,
262
- value: { ...req.query },
263
- });
264
- }
265
- const errors = [];
266
- if (paramsValidation && !paramsValidation(req.params))
267
- errors.push({ type: 'Params', errors: paramsValidation.errors });
268
- if (queryValidation && !queryValidation(req.query))
269
- errors.push({ type: 'Query', errors: queryValidation.errors });
270
- if (bodyValidation && !bodyValidation(req.body))
271
- errors.push({ type: 'Body', errors: bodyValidation.errors });
272
- if (errors.length)
273
- return Err.respond(this.validationError(Doc.HttpMethods.PATCH, path), res, errors);
274
- const json = res.json;
275
- res.json = function (obj) {
276
- obj = JSON.parse(JSON.stringify(obj)); // Here as Date => String needs to happen
277
- if ((res.statusCode === null || res.statusCode === 200) && resValidation && !resValidation(obj)) {
278
- res.status(400);
279
- console.error(`Response Validation Error: ${JSON.stringify(obj)}`);
280
- return json.call(this, { type: 'Response', errors: resValidation.errors });
281
- }
282
- else {
283
- return json.call(this, obj);
284
- }
285
- };
286
- return handler(req, res, next);
287
- };
288
- this.router.patch(path, _handler);
289
- }
290
- catch (err) {
291
- throw new Error(`Patch: ${path}: ` + String(err), { cause: err });
292
- }
319
+ this.route(Doc.HttpMethods.PATCH, path, opts, handler, true);
293
320
  }
294
321
  async put(path, opts = {}, handler) {
295
- try {
296
- const validation = this.normalizeValidation(opts);
297
- this.docs.push({ method: Doc.HttpMethods.PUT, path: path }, validation);
298
- this.schemas.set(`PUT ${path}`, validation);
299
- const resValidation = validation.res && !(validation.res instanceof Type.Any) && !(validation.res instanceof Type.Unknown) && ajv.compile(validation.res);
300
- const paramsValidation = validation.params && ajv.compile(validation.params);
301
- const queryValidation = validation.query && ajv.compile(validation.query);
302
- const bodyValidation = validation.body && ajv.compile(validation.body);
303
- const _handler = (req, res, next) => {
304
- if (req.query) { // Ref: https://github.com/cdimascio/express-openapi-validator/issues/969
305
- Object.defineProperty(req, 'query', {
306
- writable: true,
307
- value: { ...req.query },
308
- });
309
- }
310
- const errors = [];
311
- if (paramsValidation && !paramsValidation(req.params))
312
- errors.push({ type: 'Params', errors: paramsValidation.errors });
313
- if (queryValidation && !queryValidation(req.query))
314
- errors.push({ type: 'Query', errors: queryValidation.errors });
315
- if (bodyValidation && !bodyValidation(req.body))
316
- errors.push({ type: 'Body', errors: bodyValidation.errors });
317
- if (errors.length)
318
- return Err.respond(this.validationError(Doc.HttpMethods.PUT, path), res, errors);
319
- const json = res.json;
320
- res.json = function (obj) {
321
- obj = JSON.parse(JSON.stringify(obj)); // Here as Date => String needs to happen
322
- if ((res.statusCode === null || res.statusCode === 200) && resValidation && !resValidation(obj)) {
323
- res.status(400);
324
- console.error(`Response Validation Error: ${JSON.stringify(obj)}`);
325
- return json.call(this, { type: 'Response', errors: resValidation.errors });
326
- }
327
- else {
328
- return json.call(this, obj);
329
- }
330
- };
331
- return handler(req, res, next);
332
- };
333
- this.router.put(path, _handler);
334
- }
335
- catch (err) {
336
- throw new Error(`Put: ${path}: ` + String(err), { cause: err });
337
- }
322
+ this.route(Doc.HttpMethods.PUT, path, opts, handler, true);
338
323
  }
339
324
  not_found() {
340
325
  this.router.all('*path', (req, res) => {
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../lib/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AAEzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,UAAU,MAAM,aAAa,CAAC;AACrC,OAAO,GAAG,MAAM,4BAA4B,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAEzC,OAAO,EAAE,SAAS,IAAI,GAAG,EAAE,MAAM,eAAe,CAAA;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAEhC,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AAEzB,OAAO,gBAAgB,MAAM,aAAa,CAAA;AAG1C,OAAO,SAAS,MAAM,UAAU,CAAC;AACjC,OAAO,IAAI,MAAM,cAAc,CAAC;AAEhC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC;IAChB,MAAM,EAAE,KAAK;IACb,SAAS,EAAE,IAAI;IACf,WAAW,EAAE,IAAI;IACjB,gBAAgB,EAAE,KAAK;IACvB,WAAW,EAAE,IAAI;CACpB,CAAC,CAAC;AAEH,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AAI9B;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,OAAO,OAAO,OAAO;IACxB,MAAM,CAAS;IACf,IAAI,CAAO;IACX,MAAM,CAAS;IACf,KAAK,CAA0B;IAC/B,OAAO,CAAoE;IAE3E,eAAe,CAAC,MAAuB,EAAE,IAAY;QACjD,OAAO,IAAI,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,oBAAoB,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;IAC1F,CAAC;IAED,YACI,MAAc,EACd,OAMI,EAAE;QAEN,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAEtD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;QAEhC,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;YACzB,MAAM,aAAa,GAAsC,IAAI,CAAC,OAAO,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9H,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC;QACvD,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAC3D,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAErE,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACb,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QAC5B,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QACpB,CAAC;QAED,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YAC/B,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,KAAK,EAAE,IAAI,CAAC,KAAK;SACpB,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,EAAE,CAAC;IAC7B,CAAC;IAED,mBAAmB,CACf,OAA6D,EAAE;QAE/D,OAAO;YACH,UAAU,EAAE,KAAK;YACjB,GAAG,IAAI;SACV,CAAC;IACN,CAAC;IAED,KAAK,CAAC,GAAG;QACL,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,IAAI,CAAI,OAAqB,EAAE,MAAS,EAAE,OAE5C;QACA,MAAM,EAAE,KAAK;KAChB;QACG,IAAI,OAAO,YAAY,GAAG;YAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC;;YAClD,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;QAE/B,MAAM,MAAM,GAAyD,EAAE,CAAC;QAExE,gCAAgC;QAChC,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;YACtC,IAAI,CAAC,IAAI,CAAC,MAAM;gBAAE,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC;YACzD,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;gBAAE,SAAS;YAC1D,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;QAChF,CAAC;QAED,MAAM,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAE1B,IAAI,CAAC,SAAS,EAAE,CAAC;IACrB,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,SAAS,CAAI,KAAqD,EAAE,MAAU,EAAE,OAElF,EAAE,MAAM,EAAE,KAAK,EAAE;QACjB,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;QACvD,MAAM,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,GAAG,CACL,IAAY,EACZ,OAA6D,EAAE,EAC/D,OAA0F;QAE1F,IAAI,CAAC;YACD,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;YAElD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,WAAW,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,UAAU,CAAC,CAAC;YACxE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,EAAE,UAAU,CAAC,CAAC;YAE5C,MAAM,aAAa,GAAG,UAAU,CAAC,GAAG,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,YAAY,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,YAAY,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YAC1J,MAAM,gBAAgB,GAAG,UAAU,CAAC,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YAC7E,MAAM,eAAe,GAAG,UAAU,CAAC,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YAC1E,IAAI,UAAU,CAAC,IAAI;gBAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;YAEzD,MAAM,QAAQ,GAAmB,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;gBAChD,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,yEAAyE;oBACtF,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE;wBAChC,QAAQ,EAAE,IAAI;wBACd,KAAK,EAAE,EAAE,GAAG,GAAG,CAAC,KAAK,EAAE;qBAC1B,CAAC,CAAA;gBACN,CAAC;gBAED,MAAM,MAAM,GAAyB,EAAE,CAAC;gBACxC,IAAI,gBAAgB,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC;oBAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,gBAAgB,CAAC,MAAuB,EAAE,CAAC,CAAC;gBACzI,IAAI,eAAe,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC;oBAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,eAAe,CAAC,MAAuB,EAAE,CAAC,CAAC;gBACpI,IAAI,MAAM,CAAC,MAAM;oBAAE,OAAO,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;gBAEpG,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;gBACtB,GAAG,CAAC,IAAI,GAAG,UAAS,GAAG;oBACnB,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAA,CAAC,yCAAyC;oBAC/E,IAAI,CAAC,GAAG,CAAC,UAAU,KAAK,IAAI,IAAI,GAAG,CAAC,UAAU,KAAK,GAAG,CAAC,IAAI,aAAa,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;wBAC9F,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;wBAChB,OAAO,CAAC,KAAK,CAAC,8BAA8B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;wBACnE,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,CAAC,MAAuB,EAAE,CAAC,CAAC;oBAChG,CAAC;yBAAM,CAAC;wBACJ,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;oBAChC,CAAC;gBACL,CAAC,CAAC;gBAEF,OAAO,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;YACnC,CAAC,CAAC;YAEF,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACpC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,QAAQ,IAAI,IAAI,GAAG,GAAG,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAA;QAC3D,CAAC;IACL,CAAC;IAED,KAAK,CAAC,MAAM,CACR,IAAY,EACZ,OAA6D,EAAE,EAC/D,OAA0F;QAE1F,IAAI,CAAC;YACD,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;YAElD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,UAAU,CAAC,CAAC;YAC3E,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,EAAE,EAAE,UAAU,CAAC,CAAC;YAE/C,MAAM,aAAa,GAAG,UAAU,CAAC,GAAG,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,YAAY,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,YAAY,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YAC1J,MAAM,gBAAgB,GAAG,UAAU,CAAC,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YAC7E,MAAM,eAAe,GAAG,UAAU,CAAC,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YAC1E,IAAI,UAAU,CAAC,IAAI;gBAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;YAEzD,MAAM,QAAQ,GAAmB,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;gBAChD,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,yEAAyE;oBACtF,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE;wBAChC,QAAQ,EAAE,IAAI;wBACd,KAAK,EAAE,EAAE,GAAG,GAAG,CAAC,KAAK,EAAE;qBAC1B,CAAC,CAAA;gBACN,CAAC;gBAED,MAAM,MAAM,GAAyB,EAAE,CAAC;gBACxC,IAAI,gBAAgB,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC;oBAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,gBAAgB,CAAC,MAAuB,EAAE,CAAC,CAAC;gBACzI,IAAI,eAAe,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC;oBAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,eAAe,CAAC,MAAuB,EAAE,CAAC,CAAC;gBACpI,IAAI,MAAM,CAAC,MAAM;oBAAE,OAAO,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;gBAEvG,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;gBACtB,GAAG,CAAC,IAAI,GAAG,UAAS,GAAG;oBACnB,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAA,CAAC,yCAAyC;oBAC/E,IAAI,CAAC,GAAG,CAAC,UAAU,KAAK,IAAI,IAAI,GAAG,CAAC,UAAU,KAAK,GAAG,CAAC,IAAI,aAAa,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;wBAC9F,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;wBAChB,OAAO,CAAC,KAAK,CAAC,8BAA8B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;wBACnE,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,CAAC,MAAuB,EAAE,CAAC,CAAC;oBAChG,CAAC;yBAAM,CAAC;wBACJ,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;oBAChC,CAAC;gBACL,CAAC,CAAC;gBAEF,OAAO,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;YACnC,CAAC,CAAC;YAEF,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACvC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,WAAW,IAAI,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAA;QACtE,CAAC;IACL,CAAC;IAED,KAAK,CAAC,IAAI,CACN,IAAY,EACZ,OAA6D,EAAE,EAC/D,OAA0F;QAE1F,IAAI,CAAC;YACD,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;YAElD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,UAAU,CAAC,CAAC;YACzE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,EAAE,UAAU,CAAC,CAAC;YAE7C,MAAM,aAAa,GAAG,UAAU,CAAC,GAAG,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,YAAY,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,YAAY,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YAC1J,MAAM,gBAAgB,GAAG,UAAU,CAAC,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YAC7E,MAAM,eAAe,GAAG,UAAU,CAAC,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YAC1E,MAAM,cAAc,GAAG,UAAU,CAAC,IAAI,IAAI,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAEvE,MAAM,QAAQ,GAAmB,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;gBAChD,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,yEAAyE;oBACtF,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE;wBAChC,QAAQ,EAAE,IAAI;wBACd,KAAK,EAAE,EAAE,GAAG,GAAG,CAAC,KAAK,EAAE;qBAC1B,CAAC,CAAA;gBACN,CAAC;gBAED,MAAM,MAAM,GAAyB,EAAE,CAAC;gBACxC,IAAI,gBAAgB,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC;oBAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,gBAAgB,CAAC,MAAuB,EAAE,CAAC,CAAC;gBACzI,IAAI,eAAe,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC;oBAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,eAAe,CAAC,MAAuB,EAAE,CAAC,CAAC;gBACpI,IAAI,cAAc,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;oBAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,CAAC,MAAuB,EAAE,CAAC,CAAC;gBAC/H,IAAI,MAAM,CAAC,MAAM;oBAAE,OAAO,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;gBAErG,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;gBACtB,GAAG,CAAC,IAAI,GAAG,UAAS,GAAG;oBACnB,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAA,CAAC,yCAAyC;oBAC/E,IAAI,CAAC,GAAG,CAAC,UAAU,KAAK,IAAI,IAAI,GAAG,CAAC,UAAU,KAAK,GAAG,CAAC,IAAI,aAAa,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;wBAC9F,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;wBAChB,OAAO,CAAC,KAAK,CAAC,8BAA8B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;wBACnE,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,CAAC,MAAuB,EAAE,CAAC,CAAC;oBAChG,CAAC;yBAAM,CAAC;wBACJ,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;oBAChC,CAAC;gBACL,CAAC,CAAC;gBAEF,OAAO,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;YACnC,CAAC,CAAC;YAEF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACrC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,SAAS,IAAI,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAA;QACpE,CAAC;IACL,CAAC;IAED,KAAK,CAAC,KAAK,CACP,IAAY,EACZ,OAA6D,EAAE,EAC/D,OAA0F;QAE1F,IAAI,CAAC;YACD,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;YAElD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,UAAU,CAAC,CAAC;YAC1E,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE,EAAE,UAAU,CAAC,CAAC;YAE9C,MAAM,aAAa,GAAG,UAAU,CAAC,GAAG,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,YAAY,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,YAAY,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YAC1J,MAAM,gBAAgB,GAAG,UAAU,CAAC,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YAC7E,MAAM,eAAe,GAAG,UAAU,CAAC,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YAC1E,MAAM,cAAc,GAAG,UAAU,CAAC,IAAI,IAAI,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAEvE,MAAM,QAAQ,GAAmB,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;gBAChD,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,yEAAyE;oBACtF,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE;wBAChC,QAAQ,EAAE,IAAI;wBACd,KAAK,EAAE,EAAE,GAAG,GAAG,CAAC,KAAK,EAAE;qBAC1B,CAAC,CAAA;gBACN,CAAC;gBAED,MAAM,MAAM,GAAyB,EAAE,CAAC;gBACxC,IAAI,gBAAgB,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC;oBAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,gBAAgB,CAAC,MAAuB,EAAE,CAAC,CAAC;gBACzI,IAAI,eAAe,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC;oBAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,eAAe,CAAC,MAAuB,EAAE,CAAC,CAAC;gBACpI,IAAI,cAAc,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;oBAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,CAAC,MAAuB,EAAE,CAAC,CAAC;gBAC/H,IAAI,MAAM,CAAC,MAAM;oBAAE,OAAO,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;gBAEtG,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;gBACtB,GAAG,CAAC,IAAI,GAAG,UAAS,GAAG;oBACnB,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAA,CAAC,yCAAyC;oBAC/E,IAAI,CAAC,GAAG,CAAC,UAAU,KAAK,IAAI,IAAI,GAAG,CAAC,UAAU,KAAK,GAAG,CAAC,IAAI,aAAa,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;wBAC9F,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;wBAChB,OAAO,CAAC,KAAK,CAAC,8BAA8B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;wBACnE,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,CAAC,MAAuB,EAAE,CAAC,CAAC;oBAChG,CAAC;yBAAM,CAAC;wBACJ,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;oBAChC,CAAC;gBACL,CAAC,CAAC;gBAEF,OAAO,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;YACnC,CAAC,CAAC;YAEF,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACtC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,UAAU,IAAI,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAA;QACrE,CAAC;IACL,CAAC;IAED,KAAK,CAAC,GAAG,CACL,IAAY,EACZ,OAA6D,EAAE,EAC/D,OAA0F;QAE1F,IAAI,CAAC;YACD,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;YAElD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,WAAW,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,UAAU,CAAC,CAAC;YACxE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,EAAE,UAAU,CAAC,CAAC;YAE5C,MAAM,aAAa,GAAG,UAAU,CAAC,GAAG,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,YAAY,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,YAAY,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YAC1J,MAAM,gBAAgB,GAAG,UAAU,CAAC,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YAC7E,MAAM,eAAe,GAAG,UAAU,CAAC,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YAC1E,MAAM,cAAc,GAAG,UAAU,CAAC,IAAI,IAAI,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAEvE,MAAM,QAAQ,GAAmB,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;gBAChD,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,yEAAyE;oBACtF,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE;wBAChC,QAAQ,EAAE,IAAI;wBACd,KAAK,EAAE,EAAE,GAAG,GAAG,CAAC,KAAK,EAAE;qBAC1B,CAAC,CAAA;gBACN,CAAC;gBAED,MAAM,MAAM,GAAyB,EAAE,CAAC;gBACxC,IAAI,gBAAgB,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC;oBAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,gBAAgB,CAAC,MAAuB,EAAE,CAAC,CAAC;gBACzI,IAAI,eAAe,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC;oBAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,eAAe,CAAC,MAAuB,EAAE,CAAC,CAAC;gBACpI,IAAI,cAAc,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;oBAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,CAAC,MAAuB,EAAE,CAAC,CAAC;gBAC/H,IAAI,MAAM,CAAC,MAAM;oBAAE,OAAO,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;gBAEpG,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;gBACtB,GAAG,CAAC,IAAI,GAAG,UAAS,GAAG;oBACnB,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAA,CAAC,yCAAyC;oBAC/E,IAAI,CAAC,GAAG,CAAC,UAAU,KAAK,IAAI,IAAI,GAAG,CAAC,UAAU,KAAK,GAAG,CAAC,IAAI,aAAa,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;wBAC9F,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;wBAChB,OAAO,CAAC,KAAK,CAAC,8BAA8B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;wBACnE,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,CAAC,MAAuB,EAAE,CAAC,CAAC;oBAChG,CAAC;yBAAM,CAAC;wBACJ,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;oBAChC,CAAC;gBACL,CAAC,CAAC;gBAEF,OAAO,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;YACnC,CAAC,CAAC;YAEF,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACpC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,QAAQ,IAAI,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAA;QACnE,CAAC;IACL,CAAC;IAED,SAAS;QACL,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YAClC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBACjB,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE,8BAA8B;gBACvC,QAAQ,EAAE,EAAE;aACf,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IAGD,KAAK,CAAC,MAAuB,EAAE,GAAW;QAMtC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,IAAI,GAAG,EAAE,CAAC,EAAE,CAAC;YACxC,OAAO,EAAE,CAAC;QACd,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QAEhF,OAAO;YACH,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,GAAG,EAAE,MAAM,CAAC,GAAG;SAClB,CAAC;IACN,CAAC;IAED,IAAI;QAOA,MAAM,IAAI,GAMN,EAAE,CAAC;QAEP,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;YACpC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACrC,IAAI,CAAC,MAAM;gBAAE,SAAS;YAEtB,IAAI,CAAC,GAAG,CAAC,GAAG;gBACR,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI;gBACnB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK;gBACrB,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG;aACpB,CAAC;QACN,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../lib/schema.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,49 @@
1
1
  import type { TSchema } from '@sinclair/typebox';
2
+ /**
3
+ * Per-content-type body entry. May be:
4
+ * - a TypeBox schema (validated, no example)
5
+ * - `true` (any body accepted, no validation)
6
+ * - an object with optional `schema` (TSchema | true), `example`, `examples`
7
+ * (forwarded to the OpenAPI media type object)
8
+ */
9
+ export type BodyEntryConfig = {
10
+ schema?: TSchema | true;
11
+ example?: unknown;
12
+ examples?: Record<string, {
13
+ summary?: string;
14
+ description?: string;
15
+ value: unknown;
16
+ }>;
17
+ };
18
+ export type BodyEntry = TSchema | true | BodyEntryConfig;
19
+ /**
20
+ * Body validation can either be:
21
+ * - a TypeBox schema (treated as `application/json` for backwards compatibility)
22
+ * - a record mapping content-type strings to a `BodyEntry`. Content-type
23
+ * keys may include wildcards: `text/*`, `application/*`, or `* / *`.
24
+ */
25
+ export type BodyValidation<TBody extends TSchema> = TBody | Record<string, BodyEntry>;
26
+ /**
27
+ * Normalized internal representation: every entry has the expanded
28
+ * `BodyEntryConfig` shape with `schema` always set (defaulting to `true`).
29
+ */
30
+ export type NormalizedBody = Record<string, Required<Pick<BodyEntryConfig, 'schema'>> & BodyEntryConfig>;
31
+ /**
32
+ * Detect whether a given value is a TypeBox schema. TypeBox attaches a
33
+ * `[Kind]` symbol to every schema instance which is what we use to
34
+ * distinguish a schema from a content-type-keyed body record.
35
+ */
36
+ export declare function isTSchema(value: unknown): value is TSchema;
37
+ /**
38
+ * Normalize the body option into a `NormalizedBody` map. A bare TypeBox
39
+ * schema is mapped to `application/json` for backwards compatibility.
40
+ */
41
+ export declare function normalizeBody(body: TSchema | Record<string, BodyEntry> | undefined): NormalizedBody | undefined;
42
+ /**
43
+ * Match an incoming content-type against a normalized body map, honoring
44
+ * wildcard entries like `text/*` or `*\/*`. Exact matches always win.
45
+ */
46
+ export declare function matchContentType(incoming: string, normalized: NormalizedBody): string | undefined;
2
47
  export type RequestValidation<TParams extends TSchema, TQuery extends TSchema, TBody extends TSchema, TResponse extends TSchema> = {
3
48
  private?: boolean;
4
49
  deprecated?: boolean;
@@ -7,6 +52,8 @@ export type RequestValidation<TParams extends TSchema, TQuery extends TSchema, T
7
52
  description?: string;
8
53
  params?: TParams;
9
54
  query?: TQuery;
10
- body?: TBody;
55
+ body?: BodyValidation<TBody>;
56
+ /** Whether the request body is required. Defaults to true when `body` is set. */
57
+ bodyRequired?: boolean;
11
58
  res?: TResponse;
12
59
  };
package/dist/lib/types.js CHANGED
@@ -1,2 +1,49 @@
1
- export {};
1
+ import { Kind } from '@sinclair/typebox';
2
+ /**
3
+ * Detect whether a given value is a TypeBox schema. TypeBox attaches a
4
+ * `[Kind]` symbol to every schema instance which is what we use to
5
+ * distinguish a schema from a content-type-keyed body record.
6
+ */
7
+ export function isTSchema(value) {
8
+ return !!value && typeof value === 'object' && Kind in value;
9
+ }
10
+ function normalizeEntry(entry) {
11
+ if (entry === true)
12
+ return { schema: true };
13
+ if (isTSchema(entry))
14
+ return { schema: entry };
15
+ return { schema: true, ...entry };
16
+ }
17
+ /**
18
+ * Normalize the body option into a `NormalizedBody` map. A bare TypeBox
19
+ * schema is mapped to `application/json` for backwards compatibility.
20
+ */
21
+ export function normalizeBody(body) {
22
+ if (!body)
23
+ return undefined;
24
+ if (isTSchema(body))
25
+ return { 'application/json': { schema: body } };
26
+ const out = {};
27
+ for (const ct of Object.keys(body)) {
28
+ out[ct.toLowerCase()] = normalizeEntry(body[ct]);
29
+ }
30
+ return out;
31
+ }
32
+ /**
33
+ * Match an incoming content-type against a normalized body map, honoring
34
+ * wildcard entries like `text/*` or `*\/*`. Exact matches always win.
35
+ */
36
+ export function matchContentType(incoming, normalized) {
37
+ if (!incoming) {
38
+ return normalized['*/*'] ? '*/*' : undefined;
39
+ }
40
+ if (normalized[incoming])
41
+ return incoming;
42
+ const [type] = incoming.split('/');
43
+ if (type && normalized[`${type}/*`])
44
+ return `${type}/*`;
45
+ if (normalized['*/*'])
46
+ return '*/*';
47
+ return undefined;
48
+ }
2
49
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../lib/types.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../lib/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAkCzC;;;;GAIG;AACH,MAAM,UAAU,SAAS,CAAC,KAAc;IACpC,OAAO,CAAC,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,IAAI,IAAK,KAAgB,CAAC;AAC7E,CAAC;AAED,SAAS,cAAc,CAAC,KAAgB;IACpC,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAC5C,IAAI,SAAS,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAC/C,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,CAAC;AACtC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CACzB,IAAqD;IAErD,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC;IAC5B,IAAI,SAAS,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,kBAAkB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC;IAErE,MAAM,GAAG,GAAmB,EAAE,CAAC;IAC/B,KAAK,MAAM,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACjC,GAAG,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IACrD,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC5B,QAAgB,EAChB,UAA0B;IAE1B,IAAI,CAAC,QAAQ,EAAE,CAAC;QACZ,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IACjD,CAAC;IACD,IAAI,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,QAAQ,CAAC;IAE1C,MAAM,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,IAAI,IAAI,UAAU,CAAC,GAAG,IAAI,IAAI,CAAC;QAAE,OAAO,GAAG,IAAI,IAAI,CAAC;IACxD,IAAI,UAAU,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACpC,OAAO,SAAS,CAAC;AACrB,CAAC"}
@@ -0,0 +1 @@
1
+ export {};