This is the abridged developer documentation for Shokupan
# Shokupan
> The web framework that feels like a fresh start.
## Features [Section titled “Features”](#features) Type Safe End-to-end type safety with decorators. Pass data around without ever losing your types. Zero Config Stop configuring build tools. Shokupan just works, letting you focus on your product. Debug Dashboard Visualize your routes and debug requests with a beautiful built-in dashboard. Snappy Performance Built on Bun for instant startup times and low-latency responses. Auto OpenAPI Generate [OpenAPI](https://www.openapis.org/) specs automatically from your routes Rich Plugin System CORS, Sessions, Auth, Validation, Rate Limiting, and more out of the box Flexible Routing Express-style routes or decorator-based controllers - your choice Express Compatible Works with [Express](https://expressjs.com/) middleware patterns you already know Built-in Telemetry [OpenTelemetry](https://opentelemetry.io/) instrumentation out of the box OAuth2 Support GitHub, Google, Microsoft, Apple, Auth0, Okta ready to go Multi-validator Support Zod, Ajv, TypeBox, Valibot - use what you prefer Beautiful Docs Beautiful OpenAPI documentation with [Scalar](https://scalar.dev/) Easy Migration Simple migration from [Express](https://expressjs.com/) or [NestJS](https://nestjs.com/) ## Quick Start [Section titled “Quick Start”](#quick-start) ```typescript import { Shokupan } from 'shokupan'; const app = new Shokupan({ port: 3000, development: true }); app.get('/', (ctx) => { return { message: 'Hello, World!' }; }); app.listen(); ``` That’s it! Your server is running at `http://localhost:3000` 🎉 ## Why Shokupan? [Section titled “Why Shokupan?”](#why-shokupan) Shokupan (食パン - Japanese for “white bread”) provides the foundation for your web applications - simple, reliable, and essential. It combines: * **Familiarity**: Express.js-like API that feels natural * **Modern Architecture**: NestJS-style decorators and dependency injection * **Performance**: Built on Bun for exceptional speed * **Developer Experience**: Full TypeScript support with excellent type inference * **Ecosystem**: Compatible with the vast Express plugin ecosystem ## Next Steps [Section titled “Next Steps”](#next-steps) Installation [Install Shokupan](/getting-started/installation/) and set up your first project Core Concepts Learn about [routing](/core/routing/), [controllers](/core/controllers/), and [middleware](/core/middleware/) Plugins Explore the [plugin system](/plugins/cors/) for adding features Migration Migrate from [Express](/migration/from-express/), [Koa](/migration/from-koa/), or [NestJS](/migration/from-nestjs/)
# AuthPlugin
Defined in: [src/plugins/application/auth.ts:128](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/application/auth.ts#L128) Authentication plugin ## Extends [Section titled “Extends”](#extends) * `ShokupanRouter`<`any`> ## Implements [Section titled “Implements”](#implements) * [`ShokupanPlugin`](/api/interfaces/shokupanplugin/) ## Constructors [Section titled “Constructors”](#constructors) ### Constructor [Section titled “Constructor”](#constructor) > **new AuthPlugin**(`authConfig`): `AuthPlugin` Defined in: [src/plugins/application/auth.ts:131](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/application/auth.ts#L131) #### Parameters [Section titled “Parameters”](#parameters) ##### authConfig [Section titled “authConfig”](#authconfig) [`AuthConfig`](/api/interfaces/authconfig/) #### Returns [Section titled “Returns”](#returns) `AuthPlugin` #### Overrides [Section titled “Overrides”](#overrides) `ShokupanRouter.constructor` ## Properties [Section titled “Properties”](#properties) ### \[$childControllers] [Section titled “\[$childControllers\]”](#childcontrollers) > **\[$childControllers]**: [`ShokupanController`](/api/type-aliases/shokupancontroller/)\[] = `[]` Defined in: [src/router.ts:89](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L89) #### Inherited from [Section titled “Inherited from”](#inherited-from) `ShokupanRouter.[$childControllers]` *** ### \[$childRouters] [Section titled “\[$childRouters\]”](#childrouters) > **\[$childRouters]**: `ShokupanRouter`<`any`>\[] = `[]` Defined in: [src/router.ts:88](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L88) #### Inherited from [Section titled “Inherited from”](#inherited-from-1) `ShokupanRouter.[$childRouters]` *** ### \[$mountPath] [Section titled “\[$mountPath\]”](#mountpath) > **\[$mountPath]**: `string` = `"/"` Defined in: [src/router.ts:85](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L85) #### Inherited from [Section titled “Inherited from”](#inherited-from-2) `ShokupanRouter.[$mountPath]` *** ### \[$routes] [Section titled “\[$routes\]”](#routes) > **\[$routes]**: [`ShokupanRoute`](/api/type-aliases/shokupanroute/)\[] = `[]` Defined in: [src/router.ts:103](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L103) #### Inherited from [Section titled “Inherited from”](#inherited-from-3) `ShokupanRouter.[$routes]` *** ### config? [Section titled “config?”](#config) > `readonly` `optional` **config**: `object` Defined in: [src/router.ts:183](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L183) #### autoBackpressureFeedback? [Section titled “autoBackpressureFeedback?”](#autobackpressurefeedback) > `optional` **autoBackpressureFeedback**: `boolean` Whether to enable automatic backpressure based on system CPU load. ##### Default [Section titled “Default”](#default) ```ts false ``` #### autoBackpressureLevel? [Section titled “autoBackpressureLevel?”](#autobackpressurelevel) > `optional` **autoBackpressureLevel**: `number` The CPU usage percentage threshold (0-100) at which to start rejecting requests. #### controllersOnly? [Section titled “controllersOnly?”](#controllersonly) > `optional` **controllersOnly**: `boolean` Whether to enforce that only controller classes (constructors) are accepted by the router. ##### Default [Section titled “Default”](#default-1) ```ts false ``` #### group? [Section titled “group?”](#group) > `optional` **group**: `string` #### hooks? [Section titled “hooks?”](#hooks) > `optional` **hooks**: { `afterValidate?`: (`ctx`, `data`) => `void` | `Promise`<`void`>; `beforeValidate?`: (`ctx`, `data`) => `void` | `Promise`<`void`>; `onError?`: (`ctx`, `error`) => `void` | `Promise`<`void`>; `onReadTimeout?`: (`ctx`) => `void` | `Promise`<`void`>; `onRequestEnd?`: (`ctx`) => `void` | `Promise`<`void`>; `onRequestStart?`: (`ctx`) => `void` | `Promise`<`void`>; `onRequestTimeout?`: (`ctx`) => `void` | `Promise`<`void`>; `onResponseEnd?`: (`ctx`, `response`) => `void` | `Promise`<`void`>; `onResponseStart?`: (`ctx`, `response`) => `void` | `Promise`<`void`>; `onWriteTimeout?`: (`ctx`) => `void` | `Promise`<`void`>; } | `object`\[] Hooks for this route/router. #### name? [Section titled “name?”](#name) > `optional` **name**: `string` #### openapi? [Section titled “openapi?”](#openapi) > `optional` **openapi**: {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `consumes?`: `string`\[]; `deprecated?`: `boolean`; `description?`: `string`; `externalDocs?`: {\[`key`: `string`]: `any`; `description?`: `string`; `url?`: `string`; }; `operationId?`: `string`; `parameters?`: ({\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; } | {\[`key`: `string`]: `any`; `description?`: `string`; `in?`: `ParameterLocation`; `name?`: `string`; `required?`: `boolean`; `schema?`: {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; } | {\[`key`: `string`]: `any`; \[`key`: `` `x-${string}` ``]: `any`; `$ref?`: `string`; `$schema?`: `string`; `additionalItems?`: `boolean` | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; `$schema?`: `string`; `additionalItems?`: boolean | { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; … 23 more …; $ref?: string; }; `additionalProperties?`: boolean | { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; … 23 more …; $ref?: string; }; `allOf?`: …\[]; `anyOf?`: …\[]; `definitions?`: {\[`key`: …]: …; }; `dependencies?`: {\[`key`: …]: …; }; `description?`: `string`; `enum?`: …\[]; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `id?`: `string`; `items?`: … | …; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `required?`: …\[]; `title?`: `string`; `type?`: … | …; `uniqueItems?`: `boolean`; }; `additionalProperties?`: `boolean` | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; `$schema?`: `string`; `additionalItems?`: boolean | { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; … 23 more …; $ref?: string; }; `additionalProperties?`: boolean | { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; … 23 more …; $ref?: string; }; `allOf?`: …\[]; `anyOf?`: …\[]; `definitions?`: {\[`key`: …]: …; }; `dependencies?`: {\[`key`: …]: …; }; `description?`: `string`; `enum?`: …\[]; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `id?`: `string`; `items?`: … | …; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `required?`: …\[]; `title?`: `string`; `type?`: … | …; `uniqueItems?`: `boolean`; }; `allOf?`: `object`\[]; `anyOf?`: `object`\[]; `default?`: `any`; `definitions?`: {\[`key`: `string`]: `object`; }; `dependencies?`: {\[`key`: `string`]: …\[] | {\[`key`: …]: …; \[`key`: …]: …; `$ref?`: …; `$schema?`: …; `additionalItems?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `definitions?`: …; `dependencies?`: …; `description?`: …; `enum?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `id?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; }; }; `description?`: `string`; `discriminator?`: `string`; `enum?`: `any`\[]; `example?`: `any`; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `externalDocs?`: {\[`key`: `string`]: `any`; `description?`: `string`; `url?`: `string`; }; `id?`: `string`; `items?`: {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; `$schema?`: `string`; `additionalItems?`: … | … | …; `additionalProperties?`: … | … | …; `allOf?`: …\[]; `anyOf?`: …\[]; `definitions?`: {\[`key`: …]: …; }; `dependencies?`: {\[`key`: …]: …; }; `description?`: `string`; `enum?`: …\[]; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `id?`: `string`; `items?`: … | …; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: {\[`key`: …]: …; \[`key`: …]: …; `$ref?`: …; `$schema?`: …; `additionalItems?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `definitions?`: …; `dependencies?`: …; `description?`: …; `enum?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `id?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; }; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `required?`: …\[]; `title?`: `string`; `type?`: … | …; `uniqueItems?`: `boolean`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; \[`key`: `number`]: `object`; `[unscopables]?`: {\[`key`: …]: …; `[iterator]?`: …; `[unscopables]?`: …; `at?`: …; `concat?`: …; `copyWithin?`: …; `entries?`: …; `every?`: …; `fill?`: …; `filter?`: …; `find?`: …; `findIndex?`: …; `findLast?`: …; `findLastIndex?`: …; `flat?`: …; `flatMap?`: …; `forEach?`: …; `includes?`: …; `indexOf?`: …; `join?`: …; `keys?`: …; `lastIndexOf?`: …; `length?`: …; `map?`: …; `pop?`: …; `push?`: …; `reduce?`: …; `reduceRight?`: …; `reverse?`: …; `shift?`: …; `slice?`: …; `some?`: …; `sort?`: …; `splice?`: …; `toLocaleString?`: …; `toReversed?`: …; `toSorted?`: …; `toSpliced?`: …; `toString?`: …; `unshift?`: …; `values?`: …; `with?`: …; }; `$ref?`: `string`; `length?`: `number`; `[iterator]?`: `ArrayIterator`<…>; `at?`: `IJsonSchema`; `concat?`: …\[]; `copyWithin?`: `this`; `entries?`: `ArrayIterator`<…>; `every?`: `this is (...)[]`; `fill?`: `this`; `filter?`: …\[]; `find?`: `S`; `findIndex?`: `number`; `findLast?`: `S`; `findLastIndex?`: `number`; `flat?`: …\[]; `flatMap?`: …\[]; `forEach?`: `void`; `includes?`: `boolean`; `indexOf?`: `number`; `join?`: `string`; `keys?`: `ArrayIterator`<…>; `lastIndexOf?`: `number`; `map?`: …\[]; `pop?`: `IJsonSchema`; `push?`: `number`; `reduce?`: `IJsonSchema`; `reduceRight?`: `IJsonSchema`; `reverse?`: …\[]; `shift?`: `IJsonSchema`; `slice?`: …\[]; `some?`: `boolean`; `sort?`: `this`; `splice?`: …\[]; `toLocaleString?`: `string`; `toReversed?`: …\[]; `toSorted?`: …\[]; `toSpliced?`: …\[]; `toString?`: `string`; `unshift?`: `number`; `values?`: `ArrayIterator`<…>; `with?`: …\[]; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; `$schema?`: `string`; `additionalItems?`: … | … | …; `additionalProperties?`: … | … | …; `allOf?`: …\[]; `anyOf?`: …\[]; `collectionFormat?`: `string`; `default?`: `any`; `definitions?`: {\[`key`: …]: …; }; `dependencies?`: {\[`key`: …]: …; }; `description?`: `string`; `enum?`: …\[]; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `format?`: `string`; `id?`: `string`; `items?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; … 22 more …; not?: { …; }; } | { …; } | { …; } | { …; }; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: {\[`key`: …]: …; \[`key`: …]: …; `$ref?`: …; `$schema?`: …; `additionalItems?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `definitions?`: …; `dependencies?`: …; `description?`: …; `enum?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `id?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; }; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `required?`: …\[]; `title?`: `string`; `type?`: … | …; `uniqueItems?`: `boolean`; } | {\[`key`: `number`]: `object`; `[unscopables]?`: {\[`key`: …]: …; `[iterator]?`: …; `[unscopables]?`: …; `at?`: …; `concat?`: …; `copyWithin?`: …; `entries?`: …; `every?`: …; `fill?`: …; `filter?`: …; `find?`: …; `findIndex?`: …; `findLast?`: …; `findLastIndex?`: …; `flat?`: …; `flatMap?`: …; `forEach?`: …; `includes?`: …; `indexOf?`: …; `join?`: …; `keys?`: …; `lastIndexOf?`: …; `length?`: …; `map?`: …; `pop?`: …; `push?`: …; `reduce?`: …; `reduceRight?`: …; `reverse?`: …; `shift?`: …; `slice?`: …; `some?`: …; `sort?`: …; `splice?`: …; `toLocaleString?`: …; `toReversed?`: …; `toSorted?`: …; `toSpliced?`: …; `toString?`: …; `unshift?`: …; `values?`: …; `with?`: …; }; `$ref?`: `string`; `collectionFormat?`: `string`; `default?`: `any`; `enum?`: …\[]; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `format?`: `string`; `items?`: … | …; `length?`: `number`; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `multipleOf?`: `number`; `pattern?`: `string`; `type?`: `string`; `uniqueItems?`: `boolean`; `[iterator]?`: `ArrayIterator`<…>; `at?`: `IJsonSchema`; `concat?`: …\[]; `copyWithin?`: `this`; `entries?`: `ArrayIterator`<…>; `every?`: `this is (...)[]`; `fill?`: `this`; `filter?`: …\[]; `find?`: `S`; `findIndex?`: `number`; `findLast?`: `S`; `findLastIndex?`: `number`; `flat?`: …\[]; `flatMap?`: …\[]; `forEach?`: `void`; `includes?`: `boolean`; `indexOf?`: `number`; `join?`: `string`; `keys?`: `ArrayIterator`<…>; `lastIndexOf?`: `number`; `map?`: …\[]; `pop?`: `IJsonSchema`; `push?`: `number`; `reduce?`: `IJsonSchema`; `reduceRight?`: `IJsonSchema`; `reverse?`: …\[]; `shift?`: `IJsonSchema`; `slice?`: …\[]; `some?`: `boolean`; `sort?`: `this`; `splice?`: …\[]; `toLocaleString?`: `string`; `toReversed?`: …\[]; `toSorted?`: …\[]; `toSpliced?`: …\[]; `toString?`: `string`; `unshift?`: `number`; `values?`: `ArrayIterator`<…>; `with?`: …\[]; }; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; `$schema?`: `string`; `additionalItems?`: `boolean` | { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }; `additionalProperties?`: `boolean` | { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }; `allOf?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }\[]; `anyOf?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }\[]; `definitions?`: {\[`key`: `string`]: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }; }; `dependencies?`: {\[`key`: `string`]: … | …; }; `description?`: `string`; `enum?`: `any`\[]; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `id?`: `string`; `items?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; } | …\[]; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }; `oneOf?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: `string`]: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }; }; `properties?`: {\[`key`: `string`]: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }; }; `required?`: `string`\[]; `title?`: `string`; `type?`: `string` | …\[]; `uniqueItems?`: `boolean`; }; `oneOf?`: `object`\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: `string`]: `object`; }; `properties?`: {\[`key`: `string`]: `object`; }; `readOnly?`: `boolean`; `required?`: `string`\[]; `title?`: `string`; `type?`: `string` | `string`\[]; `uniqueItems?`: `boolean`; `xml?`: {\[`key`: `string`]: `any`; `attribute?`: `boolean`; `name?`: `string`; `namespace?`: `string`; `prefix?`: `string`; `wrapped?`: `boolean`; }; }; } | {\[`key`: `string`]: `any`; `$ref?`: `string`; `allowEmptyValue?`: `boolean`; `collectionFormat?`: `string`; `default?`: `any`; `description?`: `string`; `enum?`: `any`\[]; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `format?`: `string`; `in?`: `ParameterLocation`; `items?`: {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; } | { `$ref?`: `string`; `collectionFormat?`: `string`; `default?`: `any`; `enum?`: `any`\[]; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `format?`: `string`; `items?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { type?: string; format?: string; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | …; collectionFormat?: string; default?: any; … 12 more …; $ref?: string; }; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `multipleOf?`: `number`; `pattern?`: `string`; `type?`: `string`; `uniqueItems?`: `boolean`; }; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `multipleOf?`: `number`; `name?`: `string`; `pattern?`: `string`; `required?`: `boolean`; `type?`: `string`; `uniqueItems?`: `boolean`; })\[]; `produces?`: `string`\[]; `responses?`: {\[`key`: `string`]: {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; } | {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `description?`: `string`; `examples?`: {\[`key`: `string`]: `any`; }; `headers?`: {\[`key`: `string`]: `object`; }; `schema?`: {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; } | {\[`key`: `string`]: `any`; \[`key`: `` `x-${string}` ``]: `any`; `$ref?`: `string`; `$schema?`: `string`; `additionalItems?`: `boolean` | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; `$schema?`: `string`; `additionalItems?`: boolean | { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; … 23 more …; $ref?: string; }; `additionalProperties?`: boolean | { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; … 23 more …; $ref?: string; }; `allOf?`: …\[]; `anyOf?`: …\[]; `definitions?`: {\[`key`: …]: …; }; `dependencies?`: {\[`key`: …]: …; }; `description?`: `string`; `enum?`: …\[]; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `id?`: `string`; `items?`: … | …; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `required?`: …\[]; `title?`: `string`; `type?`: … | …; `uniqueItems?`: `boolean`; }; `additionalProperties?`: `boolean` | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; `$schema?`: `string`; `additionalItems?`: boolean | { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; … 23 more …; $ref?: string; }; `additionalProperties?`: boolean | { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; … 23 more …; $ref?: string; }; `allOf?`: …\[]; `anyOf?`: …\[]; `definitions?`: {\[`key`: …]: …; }; `dependencies?`: {\[`key`: …]: …; }; `description?`: `string`; `enum?`: …\[]; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `id?`: `string`; `items?`: … | …; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `required?`: …\[]; `title?`: `string`; `type?`: … | …; `uniqueItems?`: `boolean`; }; `allOf?`: `object`\[]; `anyOf?`: `object`\[]; `default?`: `any`; `definitions?`: {\[`key`: `string`]: `object`; }; `dependencies?`: {\[`key`: `string`]: …\[] | {\[`key`: …]: …; \[`key`: …]: …; `$ref?`: …; `$schema?`: …; `additionalItems?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `definitions?`: …; `dependencies?`: …; `description?`: …; `enum?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `id?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; }; }; `description?`: `string`; `discriminator?`: `string`; `enum?`: `any`\[]; `example?`: `any`; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `externalDocs?`: {\[`key`: `string`]: `any`; `description?`: `string`; `url?`: `string`; }; `id?`: `string`; `items?`: {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; `$schema?`: `string`; `additionalItems?`: … | … | …; `additionalProperties?`: … | … | …; `allOf?`: …\[]; `anyOf?`: …\[]; `definitions?`: {\[`key`: …]: …; }; `dependencies?`: {\[`key`: …]: …; }; `description?`: `string`; `enum?`: …\[]; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `id?`: `string`; `items?`: … | …; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: {\[`key`: …]: …; \[`key`: …]: …; `$ref?`: …; `$schema?`: …; `additionalItems?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `definitions?`: …; `dependencies?`: …; `description?`: …; `enum?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `id?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; }; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `required?`: …\[]; `title?`: `string`; `type?`: … | …; `uniqueItems?`: `boolean`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; \[`key`: `number`]: `object`; `[unscopables]?`: {\[`key`: …]: …; `[iterator]?`: …; `[unscopables]?`: …; `at?`: …; `concat?`: …; `copyWithin?`: …; `entries?`: …; `every?`: …; `fill?`: …; `filter?`: …; `find?`: …; `findIndex?`: …; `findLast?`: …; `findLastIndex?`: …; `flat?`: …; `flatMap?`: …; `forEach?`: …; `includes?`: …; `indexOf?`: …; `join?`: …; `keys?`: …; `lastIndexOf?`: …; `length?`: …; `map?`: …; `pop?`: …; `push?`: …; `reduce?`: …; `reduceRight?`: …; `reverse?`: …; `shift?`: …; `slice?`: …; `some?`: …; `sort?`: …; `splice?`: …; `toLocaleString?`: …; `toReversed?`: …; `toSorted?`: …; `toSpliced?`: …; `toString?`: …; `unshift?`: …; `values?`: …; `with?`: …; }; `$ref?`: `string`; `length?`: `number`; `[iterator]?`: `ArrayIterator`<…>; `at?`: `IJsonSchema`; `concat?`: …\[]; `copyWithin?`: `this`; `entries?`: `ArrayIterator`<…>; `every?`: `this is (...)[]`; `fill?`: `this`; `filter?`: …\[]; `find?`: `S`; `findIndex?`: `number`; `findLast?`: `S`; `findLastIndex?`: `number`; `flat?`: …\[]; `flatMap?`: …\[]; `forEach?`: `void`; `includes?`: `boolean`; `indexOf?`: `number`; `join?`: `string`; `keys?`: `ArrayIterator`<…>; `lastIndexOf?`: `number`; `map?`: …\[]; `pop?`: `IJsonSchema`; `push?`: `number`; `reduce?`: `IJsonSchema`; `reduceRight?`: `IJsonSchema`; `reverse?`: …\[]; `shift?`: `IJsonSchema`; `slice?`: …\[]; `some?`: `boolean`; `sort?`: `this`; `splice?`: …\[]; `toLocaleString?`: `string`; `toReversed?`: …\[]; `toSorted?`: …\[]; `toSpliced?`: …\[]; `toString?`: `string`; `unshift?`: `number`; `values?`: `ArrayIterator`<…>; `with?`: …\[]; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; `$schema?`: `string`; `additionalItems?`: … | … | …; `additionalProperties?`: … | … | …; `allOf?`: …\[]; `anyOf?`: …\[]; `collectionFormat?`: `string`; `default?`: `any`; `definitions?`: {\[`key`: …]: …; }; `dependencies?`: {\[`key`: …]: …; }; `description?`: `string`; `enum?`: …\[]; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `format?`: `string`; `id?`: `string`; `items?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; … 22 more …; not?: { …; }; } | { …; } | { …; } | { …; }; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: {\[`key`: …]: …; \[`key`: …]: …; `$ref?`: …; `$schema?`: …; `additionalItems?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `definitions?`: …; `dependencies?`: …; `description?`: …; `enum?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `id?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; }; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `required?`: …\[]; `title?`: `string`; `type?`: … | …; `uniqueItems?`: `boolean`; } | {\[`key`: `number`]: `object`; `[unscopables]?`: {\[`key`: …]: …; `[iterator]?`: …; `[unscopables]?`: …; `at?`: …; `concat?`: …; `copyWithin?`: …; `entries?`: …; `every?`: …; `fill?`: …; `filter?`: …; `find?`: …; `findIndex?`: …; `findLast?`: …; `findLastIndex?`: …; `flat?`: …; `flatMap?`: …; `forEach?`: …; `includes?`: …; `indexOf?`: …; `join?`: …; `keys?`: …; `lastIndexOf?`: …; `length?`: …; `map?`: …; `pop?`: …; `push?`: …; `reduce?`: …; `reduceRight?`: …; `reverse?`: …; `shift?`: …; `slice?`: …; `some?`: …; `sort?`: …; `splice?`: …; `toLocaleString?`: …; `toReversed?`: …; `toSorted?`: …; `toSpliced?`: …; `toString?`: …; `unshift?`: …; `values?`: …; `with?`: …; }; `$ref?`: `string`; `collectionFormat?`: `string`; `default?`: `any`; `enum?`: …\[]; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `format?`: `string`; `items?`: … | …; `length?`: `number`; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `multipleOf?`: `number`; `pattern?`: `string`; `type?`: `string`; `uniqueItems?`: `boolean`; `[iterator]?`: `ArrayIterator`<…>; `at?`: `IJsonSchema`; `concat?`: …\[]; `copyWithin?`: `this`; `entries?`: `ArrayIterator`<…>; `every?`: `this is (...)[]`; `fill?`: `this`; `filter?`: …\[]; `find?`: `S`; `findIndex?`: `number`; `findLast?`: `S`; `findLastIndex?`: `number`; `flat?`: …\[]; `flatMap?`: …\[]; `forEach?`: `void`; `includes?`: `boolean`; `indexOf?`: `number`; `join?`: `string`; `keys?`: `ArrayIterator`<…>; `lastIndexOf?`: `number`; `map?`: …\[]; `pop?`: `IJsonSchema`; `push?`: `number`; `reduce?`: `IJsonSchema`; `reduceRight?`: `IJsonSchema`; `reverse?`: …\[]; `shift?`: `IJsonSchema`; `slice?`: …\[]; `some?`: `boolean`; `sort?`: `this`; `splice?`: …\[]; `toLocaleString?`: `string`; `toReversed?`: …\[]; `toSorted?`: …\[]; `toSpliced?`: …\[]; `toString?`: `string`; `unshift?`: `number`; `values?`: `ArrayIterator`<…>; `with?`: …\[]; }; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; `$schema?`: `string`; `additionalItems?`: `boolean` | { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }; `additionalProperties?`: `boolean` | { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }; `allOf?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }\[]; `anyOf?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }\[]; `definitions?`: {\[`key`: `string`]: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }; }; `dependencies?`: {\[`key`: `string`]: … | …; }; `description?`: `string`; `enum?`: `any`\[]; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `id?`: `string`; `items?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; } | …\[]; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }; `oneOf?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: `string`]: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }; }; `properties?`: {\[`key`: `string`]: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }; }; `required?`: `string`\[]; `title?`: `string`; `type?`: `string` | …\[]; `uniqueItems?`: `boolean`; }; `oneOf?`: `object`\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: `string`]: `object`; }; `properties?`: {\[`key`: `string`]: `object`; }; `readOnly?`: `boolean`; `required?`: `string`\[]; `title?`: `string`; `type?`: `string` | `string`\[]; `uniqueItems?`: `boolean`; `xml?`: {\[`key`: `string`]: `any`; `attribute?`: `boolean`; `name?`: `string`; `namespace?`: `string`; `prefix?`: `string`; `wrapped?`: `boolean`; }; }; }; `default?`: {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; } | {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `description?`: `string`; `examples?`: {\[`key`: `string`]: `any`; }; `headers?`: {\[`key`: `string`]: `object`; }; `schema?`: {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; } | {\[`key`: `string`]: `any`; \[`key`: `` `x-${string}` ``]: `any`; `$ref?`: `string`; `$schema?`: `string`; `additionalItems?`: `boolean` | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; `$schema?`: `string`; `additionalItems?`: boolean | { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; … 23 more …; $ref?: string; }; `additionalProperties?`: boolean | { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; … 23 more …; $ref?: string; }; `allOf?`: …\[]; `anyOf?`: …\[]; `definitions?`: {\[`key`: …]: …; }; `dependencies?`: {\[`key`: …]: …; }; `description?`: `string`; `enum?`: …\[]; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `id?`: `string`; `items?`: … | …; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `required?`: …\[]; `title?`: `string`; `type?`: … | …; `uniqueItems?`: `boolean`; }; `additionalProperties?`: `boolean` | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; `$schema?`: `string`; `additionalItems?`: boolean | { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; … 23 more …; $ref?: string; }; `additionalProperties?`: boolean | { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; … 23 more …; $ref?: string; }; `allOf?`: …\[]; `anyOf?`: …\[]; `definitions?`: {\[`key`: …]: …; }; `dependencies?`: {\[`key`: …]: …; }; `description?`: `string`; `enum?`: …\[]; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `id?`: `string`; `items?`: … | …; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `required?`: …\[]; `title?`: `string`; `type?`: … | …; `uniqueItems?`: `boolean`; }; `allOf?`: `object`\[]; `anyOf?`: `object`\[]; `default?`: `any`; `definitions?`: {\[`key`: `string`]: `object`; }; `dependencies?`: {\[`key`: `string`]: …\[] | {\[`key`: …]: …; \[`key`: …]: …; `$ref?`: …; `$schema?`: …; `additionalItems?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `definitions?`: …; `dependencies?`: …; `description?`: …; `enum?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `id?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; }; }; `description?`: `string`; `discriminator?`: `string`; `enum?`: `any`\[]; `example?`: `any`; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `externalDocs?`: {\[`key`: `string`]: `any`; `description?`: `string`; `url?`: `string`; }; `id?`: `string`; `items?`: {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; `$schema?`: `string`; `additionalItems?`: … | … | …; `additionalProperties?`: … | … | …; `allOf?`: …\[]; `anyOf?`: …\[]; `definitions?`: {\[`key`: …]: …; }; `dependencies?`: {\[`key`: …]: …; }; `description?`: `string`; `enum?`: …\[]; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `id?`: `string`; `items?`: … | …; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: {\[`key`: …]: …; \[`key`: …]: …; `$ref?`: …; `$schema?`: …; `additionalItems?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `definitions?`: …; `dependencies?`: …; `description?`: …; `enum?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `id?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; }; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `required?`: …\[]; `title?`: `string`; `type?`: … | …; `uniqueItems?`: `boolean`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; \[`key`: `number`]: `object`; `[unscopables]?`: {\[`key`: …]: …; `[iterator]?`: …; `[unscopables]?`: …; `at?`: …; `concat?`: …; `copyWithin?`: …; `entries?`: …; `every?`: …; `fill?`: …; `filter?`: …; `find?`: …; `findIndex?`: …; `findLast?`: …; `findLastIndex?`: …; `flat?`: …; `flatMap?`: …; `forEach?`: …; `includes?`: …; `indexOf?`: …; `join?`: …; `keys?`: …; `lastIndexOf?`: …; `length?`: …; `map?`: …; `pop?`: …; `push?`: …; `reduce?`: …; `reduceRight?`: …; `reverse?`: …; `shift?`: …; `slice?`: …; `some?`: …; `sort?`: …; `splice?`: …; `toLocaleString?`: …; `toReversed?`: …; `toSorted?`: …; `toSpliced?`: …; `toString?`: …; `unshift?`: …; `values?`: …; `with?`: …; }; `$ref?`: `string`; `length?`: `number`; `[iterator]?`: `ArrayIterator`<…>; `at?`: `IJsonSchema`; `concat?`: …\[]; `copyWithin?`: `this`; `entries?`: `ArrayIterator`<…>; `every?`: `this is (...)[]`; `fill?`: `this`; `filter?`: …\[]; `find?`: `S`; `findIndex?`: `number`; `findLast?`: `S`; `findLastIndex?`: `number`; `flat?`: …\[]; `flatMap?`: …\[]; `forEach?`: `void`; `includes?`: `boolean`; `indexOf?`: `number`; `join?`: `string`; `keys?`: `ArrayIterator`<…>; `lastIndexOf?`: `number`; `map?`: …\[]; `pop?`: `IJsonSchema`; `push?`: `number`; `reduce?`: `IJsonSchema`; `reduceRight?`: `IJsonSchema`; `reverse?`: …\[]; `shift?`: `IJsonSchema`; `slice?`: …\[]; `some?`: `boolean`; `sort?`: `this`; `splice?`: …\[]; `toLocaleString?`: `string`; `toReversed?`: …\[]; `toSorted?`: …\[]; `toSpliced?`: …\[]; `toString?`: `string`; `unshift?`: `number`; `values?`: `ArrayIterator`<…>; `with?`: …\[]; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; `$schema?`: `string`; `additionalItems?`: … | … | …; `additionalProperties?`: … | … | …; `allOf?`: …\[]; `anyOf?`: …\[]; `collectionFormat?`: `string`; `default?`: `any`; `definitions?`: {\[`key`: …]: …; }; `dependencies?`: {\[`key`: …]: …; }; `description?`: `string`; `enum?`: …\[]; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `format?`: `string`; `id?`: `string`; `items?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; … 22 more …; not?: { …; }; } | { …; } | { …; } | { …; }; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: {\[`key`: …]: …; \[`key`: …]: …; `$ref?`: …; `$schema?`: …; `additionalItems?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `definitions?`: …; `dependencies?`: …; `description?`: …; `enum?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `id?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; }; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `required?`: …\[]; `title?`: `string`; `type?`: … | …; `uniqueItems?`: `boolean`; } | {\[`key`: `number`]: `object`; `[unscopables]?`: {\[`key`: …]: …; `[iterator]?`: …; `[unscopables]?`: …; `at?`: …; `concat?`: …; `copyWithin?`: …; `entries?`: …; `every?`: …; `fill?`: …; `filter?`: …; `find?`: …; `findIndex?`: …; `findLast?`: …; `findLastIndex?`: …; `flat?`: …; `flatMap?`: …; `forEach?`: …; `includes?`: …; `indexOf?`: …; `join?`: …; `keys?`: …; `lastIndexOf?`: …; `length?`: …; `map?`: …; `pop?`: …; `push?`: …; `reduce?`: …; `reduceRight?`: …; `reverse?`: …; `shift?`: …; `slice?`: …; `some?`: …; `sort?`: …; `splice?`: …; `toLocaleString?`: …; `toReversed?`: …; `toSorted?`: …; `toSpliced?`: …; `toString?`: …; `unshift?`: …; `values?`: …; `with?`: …; }; `$ref?`: `string`; `collectionFormat?`: `string`; `default?`: `any`; `enum?`: …\[]; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `format?`: `string`; `items?`: … | …; `length?`: `number`; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `multipleOf?`: `number`; `pattern?`: `string`; `type?`: `string`; `uniqueItems?`: `boolean`; `[iterator]?`: `ArrayIterator`<…>; `at?`: `IJsonSchema`; `concat?`: …\[]; `copyWithin?`: `this`; `entries?`: `ArrayIterator`<…>; `every?`: `this is (...)[]`; `fill?`: `this`; `filter?`: …\[]; `find?`: `S`; `findIndex?`: `number`; `findLast?`: `S`; `findLastIndex?`: `number`; `flat?`: …\[]; `flatMap?`: …\[]; `forEach?`: `void`; `includes?`: `boolean`; `indexOf?`: `number`; `join?`: `string`; `keys?`: `ArrayIterator`<…>; `lastIndexOf?`: `number`; `map?`: …\[]; `pop?`: `IJsonSchema`; `push?`: `number`; `reduce?`: `IJsonSchema`; `reduceRight?`: `IJsonSchema`; `reverse?`: …\[]; `shift?`: `IJsonSchema`; `slice?`: …\[]; `some?`: `boolean`; `sort?`: `this`; `splice?`: …\[]; `toLocaleString?`: `string`; `toReversed?`: …\[]; `toSorted?`: …\[]; `toSpliced?`: …\[]; `toString?`: `string`; `unshift?`: `number`; `values?`: `ArrayIterator`<…>; `with?`: …\[]; }; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; `$schema?`: `string`; `additionalItems?`: `boolean` | { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }; `additionalProperties?`: `boolean` | { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }; `allOf?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }\[]; `anyOf?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }\[]; `definitions?`: {\[`key`: `string`]: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }; }; `dependencies?`: {\[`key`: `string`]: … | …; }; `description?`: `string`; `enum?`: `any`\[]; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `id?`: `string`; `items?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; } | …\[]; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }; `oneOf?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: `string`]: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }; }; `properties?`: {\[`key`: `string`]: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }; }; `required?`: `string`\[]; `title?`: `string`; `type?`: `string` | …\[]; `uniqueItems?`: `boolean`; }; `oneOf?`: `object`\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: `string`]: `object`; }; `properties?`: {\[`key`: `string`]: `object`; }; `readOnly?`: `boolean`; `required?`: `string`\[]; `title?`: `string`; `type?`: `string` | `string`\[]; `uniqueItems?`: `boolean`; `xml?`: {\[`key`: `string`]: `any`; `attribute?`: `boolean`; `name?`: `string`; `namespace?`: `string`; `prefix?`: `string`; `wrapped?`: `boolean`; }; }; }; }; `schemes?`: `string`\[]; `security?`: `object`\[]; `summary?`: `string`; `tags?`: `string`\[]; } | {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `callbacks?`: {\[`key`: `string`]: {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; } | {\[`key`: `string`]: `object`; }; }; `deprecated?`: `boolean`; `description?`: `string`; `externalDocs?`: { `description?`: `string`; `url?`: `string`; }; `operationId?`: `string`; `parameters?`: ({\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; } | { `allowEmptyValue?`: `boolean`; `allowReserved?`: `boolean`; `content?`: {\[`key`: `string`]: `object`; }; `deprecated?`: `boolean`; `description?`: `string`; `example?`: `any`; `examples?`: {\[`key`: `string`]: {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; } | { `description?`: `string`; `externalValue?`: `string`; `summary?`: `string`; `value?`: `any`; }; }; `explode?`: `boolean`; `in?`: `ParameterLocation`; `name?`: `string`; `required?`: `boolean`; `schema?`: {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; } | {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `additionalProperties?`: `boolean` | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: NonArraySchemaObjectType; … 33 more …; deprecated?: boolean; }; … 33 more …; deprecated?: boolean; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `additionalProperties?`: boolean | { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; …; `allOf?`: …\[]; `anyOf?`: …\[]; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…; `nullable?`: `boolean`; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: `NonArraySchemaObjectType`; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `attribute?`: …; `name?`: …; `namespace?`: …; `prefix?`: …; `wrapped?`: …; }; }; `allOf?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…\[]; `anyOf?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…\[]; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `mapping?`: {\[`key`: `string`]: `string`; }; `propertyName?`: `string`; }; `enum?`: `any`\[]; `example?`: `any`; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `externalDocs?`: { `description?`: `string`; `url?`: `string`; }; `format?`: `string`; `items?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…; `nullable?`: `boolean`; `oneOf?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: `string`]: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…; }; `properties?`: {\[`key`: `string`]: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…; }; `readOnly?`: `boolean`; `required?`: `string`\[]; `title?`: `string`; `type?`: `"array"`; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `attribute?`: `boolean`; `name?`: `string`; `namespace?`: `string`; `prefix?`: `string`; `wrapped?`: `boolean`; }; } | {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `additionalProperties?`: `boolean` | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `additionalProperties?`: boolean | { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; …; `allOf?`: …\[]; `anyOf?`: …\[]; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `items?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…; `nullable?`: `boolean`; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: `"array"`; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `attribute?`: …; `name?`: …; `namespace?`: …; `prefix?`: …; `wrapped?`: …; }; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: NonArraySchemaObjectType; title?: string; description?: string; format?: string; default?: any; multipleOf?: number; maximum?: number; … 27 more …; deprecated?: boolean; }; `allOf?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…\[]; `anyOf?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…\[]; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `mapping?`: {\[`key`: `string`]: `string`; }; `propertyName?`: `string`; }; `enum?`: `any`\[]; `example?`: `any`; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `externalDocs?`: { `description?`: `string`; `url?`: `string`; }; `format?`: `string`; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…; `nullable?`: `boolean`; `oneOf?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: `string`]: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…; }; `properties?`: {\[`key`: `string`]: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…; }; `readOnly?`: `boolean`; `required?`: `string`\[]; `title?`: `string`; `type?`: `NonArraySchemaObjectType`; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `attribute?`: `boolean`; `name?`: `string`; `namespace?`: `string`; `prefix?`: `string`; `wrapped?`: `boolean`; }; }; `style?`: `ParameterStyle`; })\[]; `requestBody?`: {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; } | { `content?`: {\[`key`: `string`]: `object`; }; `description?`: `string`; `required?`: `boolean`; }; `responses?`: {\[`key`: `string`]: {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; } | {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `content?`: {\[`key`: `string`]: `object`; }; `description?`: `string`; `headers?`: {\[`key`: `string`]: {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; } | { `allowEmptyValue?`: `boolean`; `allowReserved?`: `boolean`; `content?`: {\[`key`: `string`]: `object`; }; `deprecated?`: `boolean`; `description?`: `string`; `example?`: `any`; `examples?`: {\[`key`: `string`]: … | …; }; `explode?`: `boolean`; `required?`: `boolean`; `schema?`: {\[`key`: …]: …; \[`key`: …]: …; `$ref?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `nullable?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `nullable?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; }; `style?`: `ParameterStyle`; }; }; `links?`: {\[`key`: `string`]: {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; } | { `description?`: `string`; `operationId?`: `string`; `operationRef?`: `string`; `parameters?`: {\[`key`: `string`]: `any`; }; `requestBody?`: `any`; `server?`: { `description?`: `string`; `url?`: `string`; `variables?`: {\[`key`: …]: …; }; }; }; }; }; }; `security?`: `object`\[]; `servers?`: `object`\[]; `summary?`: `string`; `tags?`: `string`\[]; } | {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `callbacks?`: {\[`key`: `string`]: {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `description?`: `string`; `summary?`: `string`; } | {\[`key`: `string`]: {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `description?`: `string`; `summary?`: `string`; } | {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `delete?`: { \[x: string]: any; \[x: number]: any; parameters?: ({ name?: string; in?: ParameterLocation; description?: string; required?: boolean; deprecated?: boolean; allowEmptyValue?: boolean; … 6 more …; content?: { …; }; } | { …; })\[]; requestBody?: { …; } | { …; }; responses?: { …; }; callbacks?: { …; }; s…; `get?`: { \[x: string]: any; \[x: number]: any; parameters?: ({ name?: string; in?: ParameterLocation; description?: string; required?: boolean; deprecated?: boolean; allowEmptyValue?: boolean; … 6 more …; content?: { …; }; } | { …; })\[]; requestBody?: { …; } | { …; }; responses?: { …; }; callbacks?: { …; }; s…; `head?`: { \[x: string]: any; \[x: number]: any; parameters?: ({ name?: string; in?: ParameterLocation; description?: string; required?: boolean; deprecated?: boolean; allowEmptyValue?: boolean; … 6 more …; content?: { …; }; } | { …; })\[]; requestBody?: { …; } | { …; }; responses?: { …; }; callbacks?: { …; }; s…; `options?`: { \[x: string]: any; \[x: number]: any; parameters?: ({ name?: string; in?: ParameterLocation; description?: string; required?: boolean; deprecated?: boolean; allowEmptyValue?: boolean; … 6 more …; content?: { …; }; } | { …; })\[]; requestBody?: { …; } | { …; }; responses?: { …; }; callbacks?: { …; }; s…; `parameters?`: ({ `allowEmptyValue?`: …; `allowReserved?`: …; `content?`: …; `deprecated?`: …; `description?`: …; `example?`: …; `examples?`: …; `explode?`: …; `in?`: …; `name?`: …; `required?`: …; `schema?`: …; `style?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `description?`: …; `summary?`: …; })\[]; `patch?`: { \[x: string]: any; \[x: number]: any; parameters?: ({ name?: string; in?: ParameterLocation; description?: string; required?: boolean; deprecated?: boolean; allowEmptyValue?: boolean; … 6 more …; content?: { …; }; } | { …; })\[]; requestBody?: { …; } | { …; }; responses?: { …; }; callbacks?: { …; }; s…; `post?`: { \[x: string]: any; \[x: number]: any; parameters?: ({ name?: string; in?: ParameterLocation; description?: string; required?: boolean; deprecated?: boolean; allowEmptyValue?: boolean; … 6 more …; content?: { …; }; } | { …; })\[]; requestBody?: { …; } | { …; }; responses?: { …; }; callbacks?: { …; }; s…; `put?`: { \[x: string]: any; \[x: number]: any; parameters?: ({ name?: string; in?: ParameterLocation; description?: string; required?: boolean; deprecated?: boolean; allowEmptyValue?: boolean; … 6 more …; content?: { …; }; } | { …; })\[]; requestBody?: { …; } | { …; }; responses?: { …; }; callbacks?: { …; }; s…; `servers?`: `object`\[]; `trace?`: { \[x: string]: any; \[x: number]: any; parameters?: ({ name?: string; in?: ParameterLocation; description?: string; required?: boolean; deprecated?: boolean; allowEmptyValue?: boolean; … 6 more …; content?: { …; }; } | { …; })\[]; requestBody?: { …; } | { …; }; responses?: { …; }; callbacks?: { …; }; s…; }; }; }; `parameters?`: ({ `allowEmptyValue?`: `boolean`; `allowReserved?`: `boolean`; `content?`: {\[`key`: `string`]: `object`; }; `deprecated?`: `boolean`; `description?`: `string`; `example?`: `any`; `examples?`: {\[`key`: `string`]: {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; } | { `description?`: `string`; `externalValue?`: `string`; `summary?`: `string`; `value?`: `any`; }; }; `explode?`: `boolean`; `in?`: `ParameterLocation`; `name?`: `string`; `required?`: `boolean`; `schema?`: {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; } | {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `additionalProperties?`: `boolean` | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: NonArraySchemaObjectType; … 33 more …; deprecated?: boolean; }; … 33 more …; deprecated?: boolean; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `additionalProperties?`: boolean | { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; …; `allOf?`: …\[]; `anyOf?`: …\[]; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…; `nullable?`: `boolean`; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: `NonArraySchemaObjectType`; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `attribute?`: …; `name?`: …; `namespace?`: …; `prefix?`: …; `wrapped?`: …; }; }; `allOf?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…\[]; `anyOf?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…\[]; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `mapping?`: {\[`key`: `string`]: `string`; }; `propertyName?`: `string`; }; `enum?`: `any`\[]; `example?`: `any`; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `externalDocs?`: { `description?`: `string`; `url?`: `string`; }; `format?`: `string`; `items?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…; `nullable?`: `boolean`; `oneOf?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: `string`]: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…; }; `properties?`: {\[`key`: `string`]: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…; }; `readOnly?`: `boolean`; `required?`: `string`\[]; `title?`: `string`; `type?`: `"array"`; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `attribute?`: `boolean`; `name?`: `string`; `namespace?`: `string`; `prefix?`: `string`; `wrapped?`: `boolean`; }; } | {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `additionalProperties?`: `boolean` | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `additionalProperties?`: boolean | { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; …; `allOf?`: …\[]; `anyOf?`: …\[]; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `items?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…; `nullable?`: `boolean`; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: `"array"`; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `attribute?`: …; `name?`: …; `namespace?`: …; `prefix?`: …; `wrapped?`: …; }; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: NonArraySchemaObjectType; title?: string; description?: string; format?: string; default?: any; multipleOf?: number; maximum?: number; … 27 more …; deprecated?: boolean; }; `allOf?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…\[]; `anyOf?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…\[]; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `mapping?`: {\[`key`: `string`]: `string`; }; `propertyName?`: `string`; }; `enum?`: `any`\[]; `example?`: `any`; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `externalDocs?`: { `description?`: `string`; `url?`: `string`; }; `format?`: `string`; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…; `nullable?`: `boolean`; `oneOf?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: `string`]: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…; }; `properties?`: {\[`key`: `string`]: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…; }; `readOnly?`: `boolean`; `required?`: `string`\[]; `title?`: `string`; `type?`: `NonArraySchemaObjectType`; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `attribute?`: `boolean`; `name?`: `string`; `namespace?`: `string`; `prefix?`: `string`; `wrapped?`: `boolean`; }; }; `style?`: `ParameterStyle`; } | {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `description?`: `string`; `summary?`: `string`; })\[]; `requestBody?`: {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `description?`: `string`; `summary?`: `string`; } | { `content?`: {\[`key`: `string`]: `object`; }; `description?`: `string`; `required?`: `boolean`; }; `responses?`: {\[`key`: `string`]: {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `description?`: `string`; `summary?`: `string`; } | {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `content?`: {\[`key`: `string`]: `object`; }; `headers?`: {\[`key`: `string`]: {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `description?`: `string`; `summary?`: `string`; } | { `allowEmptyValue?`: `boolean`; `allowReserved?`: `boolean`; `content?`: {\[`key`: `string`]: `object`; }; `deprecated?`: `boolean`; `description?`: `string`; `example?`: `any`; `examples?`: {\[`key`: `string`]: … | …; }; `explode?`: `boolean`; `required?`: `boolean`; `schema?`: {\[`key`: …]: …; \[`key`: …]: …; `$ref?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `nullable?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `nullable?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; }; `style?`: `ParameterStyle`; }; }; `links?`: {\[`key`: `string`]: {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `description?`: `string`; `summary?`: `string`; } | { `description?`: `string`; `operationId?`: `string`; `operationRef?`: `string`; `parameters?`: {\[`key`: `string`]: `any`; }; `requestBody?`: `any`; `server?`: { `description?`: `string`; `url?`: `string`; `variables?`: {\[`key`: …]: …; }; }; }; }; }; }; `servers?`: `object`\[]; } | {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `callbacks?`: {\[`key`: `string`]: {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `description?`: `string`; `summary?`: `string`; } | {\[`key`: `string`]: {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `description?`: `string`; `summary?`: `string`; } | {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `additionalOperations?`: {\[`key`: `string`]: { \[x: string]: any; \[x: number]: any; parameters?: ({ \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { description?: string; deprecated?: boolean; content?: { \[x: string]: { schema?: { …; } | … 1 more … | { …; }; example?: any; examples?: { …; }; encoding?: { …; }; }; }; …; }; `delete?`: { \[x: string]: any; \[x: number]: any; parameters?: ({ \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { description?: string; deprecated?: boolean; content?: { \[x: string]: { schema?: { …; } | … 1 more … | { …; }; example?: any; examples?: { …; }; encoding?: { …; }; }; }; …; `get?`: { \[x: string]: any; \[x: number]: any; parameters?: ({ \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { description?: string; deprecated?: boolean; content?: { \[x: string]: { schema?: { …; } | … 1 more … | { …; }; example?: any; examples?: { …; }; encoding?: { …; }; }; }; …; `head?`: { \[x: string]: any; \[x: number]: any; parameters?: ({ \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { description?: string; deprecated?: boolean; content?: { \[x: string]: { schema?: { …; } | … 1 more … | { …; }; example?: any; examples?: { …; }; encoding?: { …; }; }; }; …; `options?`: { \[x: string]: any; \[x: number]: any; parameters?: ({ \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { description?: string; deprecated?: boolean; content?: { \[x: string]: { schema?: { …; } | … 1 more … | { …; }; example?: any; examples?: { …; }; encoding?: { …; }; }; }; …; `parameters?`: ({\[`key`: …]: …; \[`key`: …]: …; `description?`: …; `summary?`: …; } | { `allowEmptyValue?`: …; `allowReserved?`: …; `content?`: …; `deprecated?`: …; `description?`: …; `example?`: …; `examples?`: …; `explode?`: …; `in?`: …; `name?`: …; `required?`: …; `schema?`: …; `style?`: …; })\[]; `patch?`: { \[x: string]: any; \[x: number]: any; parameters?: ({ \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { description?: string; deprecated?: boolean; content?: { \[x: string]: { schema?: { …; } | … 1 more … | { …; }; example?: any; examples?: { …; }; encoding?: { …; }; }; }; …; `post?`: { \[x: string]: any; \[x: number]: any; parameters?: ({ \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { description?: string; deprecated?: boolean; content?: { \[x: string]: { schema?: { …; } | … 1 more … | { …; }; example?: any; examples?: { …; }; encoding?: { …; }; }; }; …; `put?`: { \[x: string]: any; \[x: number]: any; parameters?: ({ \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { description?: string; deprecated?: boolean; content?: { \[x: string]: { schema?: { …; } | … 1 more … | { …; }; example?: any; examples?: { …; }; encoding?: { …; }; }; }; …; `query?`: { \[x: string]: any; \[x: number]: any; parameters?: ({ \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { description?: string; deprecated?: boolean; content?: { \[x: string]: { schema?: { …; } | … 1 more … | { …; }; example?: any; examples?: { …; }; encoding?: { …; }; }; }; …; `trace?`: { \[x: string]: any; \[x: number]: any; parameters?: ({ \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { description?: string; deprecated?: boolean; content?: { \[x: string]: { schema?: { …; } | … 1 more … | { …; }; example?: any; examples?: { …; }; encoding?: { …; }; }; }; …; }; }; }; `parameters?`: ({\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `description?`: `string`; `summary?`: `string`; } | { `allowEmptyValue?`: `boolean`; `allowReserved?`: `boolean`; `content?`: {\[`key`: `string`]: `object`; }; `deprecated?`: `boolean`; `description?`: `string`; `example?`: `any`; `examples?`: {\[`key`: `string`]: {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `description?`: `string`; `summary?`: `string`; } | { `dataValue?`: `any`; `description?`: `string`; `externalValue?`: `string`; `serializedValue?`: `string`; `summary?`: `string`; `value?`: `any`; }; }; `explode?`: `boolean`; `in?`: `ParameterLocation`; `name?`: `string`; `required?`: `boolean`; `schema?`: {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `description?`: `string`; `summary?`: `string`; } | {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `valueOf?`: `boolean`; } | {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `valueOf?`: `boolean`; } | {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: `boolean` | {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `description?`: `string`; `summary?`: `string`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `valueOf?`: `boolean`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `valueOf?`: `boolean`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: boolean | { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `allOf?`: …\[]; `anyOf?`: …\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `examples?`: …\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `items?`: … | … | … | … | … | …; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: … | … | … | … | … | …; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: `"array"`; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `attribute?`: …; `name?`: …; `namespace?`: …; `prefix?`: …; `wrapped?`: …; }; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: boolean | { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `allOf?`: …\[]; `anyOf?`: …\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `examples?`: …\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: … | … | … | … | … | …; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: `NonArraySchemaObjectType`; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `attribute?`: …; `name?`: …; `namespace?`: …; `prefix?`: …; `wrapped?`: …; }; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: boolean | { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `allOf?`: …\[]; `anyOf?`: …\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `examples?`: …\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `items?`: … | … | … | … | … | …; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: … | … | … | … | … | …; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: …\[]; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `attribute?`: …; `name?`: …; `namespace?`: …; `prefix?`: …; `wrapped?`: …; }; }; `allOf?`: ({\[`key`: …]: …; \[`key`: …]: …; `description?`: …; `summary?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; })\[]; `anyOf?`: ({\[`key`: …]: …; \[`key`: …]: …; `description?`: …; `summary?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; })\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `defaultMapping?`: `string`; `mapping?`: {\[`key`: `string`]: `string`; }; `propertyName?`: `string`; }; `enum?`: `any`\[]; `example?`: `any`; `examples?`: `object`\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: `string`; `url?`: `string`; }; `format?`: `string`; `items?`: { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `description?`: `string`; `summary?`: `string`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `valueOf?`: `boolean`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `valueOf?`: `boolean`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: … | … | … | … | … | … | … | …; `allOf?`: …\[]; `anyOf?`: …\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `examples?`: …\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `items?`: { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: `"array"`; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `attribute?`: …; `name?`: …; `namespace?`: …; `prefix?`: …; `wrapped?`: …; }; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: … | … | … | … | … | … | … | …; `allOf?`: …\[]; `anyOf?`: …\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `examples?`: …\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: `NonArraySchemaObjectType`; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `attribute?`: …; `name?`: …; `namespace?`: …; `prefix?`: …; `wrapped?`: …; }; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: … | … | … | … | … | … | … | …; `allOf?`: …\[]; `anyOf?`: …\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `examples?`: …\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `items?`: { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: …\[]; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `attribute?`: …; `name?`: …; `namespace?`: …; `prefix?`: …; `wrapped?`: …; }; }; `oneOf?`: ({\[`key`: …]: …; \[`key`: …]: …; `description?`: …; `summary?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; })\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: `string`]: {\[`key`: …]: …; \[`key`: …]: …; `description?`: …; `summary?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; }; }; `properties?`: {\[`key`: `string`]: {\[`key`: …]: …; \[`key`: …]: …; `description?`: …; `summary?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; }; }; `readOnly?`: `boolean`; `required?`: `string`\[]; `title?`: `string`; `type?`: `"array"`; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `name?`: `string`; `namespace?`: `string`; `nodeType?`: `XMLNodeType`; `prefix?`: `string`; }; } | {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: `boolean` | {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `description?`: `string`; `summary?`: `string`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `valueOf?`: `boolean`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `valueOf?`: `boolean`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: boolean | { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `allOf?`: …\[]; `anyOf?`: …\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `examples?`: …\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `items?`: … | … | … | … | … | …; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: … | … | … | … | … | …; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: `"array"`; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `attribute?`: …; `name?`: …; `namespace?`: …; `prefix?`: …; `wrapped?`: …; }; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: boolean | { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `allOf?`: …\[]; `anyOf?`: …\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `examples?`: …\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: … | … | … | … | … | …; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: `NonArraySchemaObjectType`; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `attribute?`: …; `name?`: …; `namespace?`: …; `prefix?`: …; `wrapped?`: …; }; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: boolean | { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `allOf?`: …\[]; `anyOf?`: …\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `examples?`: …\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `items?`: … | … | … | … | … | …; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: … | … | … | … | … | …; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: …\[]; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `attribute?`: …; `name?`: …; `namespace?`: …; `prefix?`: …; `wrapped?`: …; }; }; `allOf?`: ({\[`key`: …]: …; \[`key`: …]: …; `description?`: …; `summary?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; })\[]; `anyOf?`: ({\[`key`: …]: …; \[`key`: …]: …; `description?`: …; `summary?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; })\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `defaultMapping?`: `string`; `mapping?`: {\[`key`: `string`]: `string`; }; `propertyName?`: `string`; }; `enum?`: `any`\[]; `example?`: `any`; `examples?`: `object`\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: `string`; `url?`: `string`; }; `format?`: `string`; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `description?`: `string`; `summary?`: `string`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `valueOf?`: `boolean`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `valueOf?`: `boolean`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: … | … | … | … | … | … | … | …; `allOf?`: …\[]; `anyOf?`: …\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `examples?`: …\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `items?`: { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: `"array"`; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `attribute?`: …; `name?`: …; `namespace?`: …; `prefix?`: …; `wrapped?`: …; }; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: … | … | … | … | … | … | … | …; `allOf?`: …\[]; `anyOf?`: …\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `examples?`: …\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: `NonArraySchemaObjectType`; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `attribute?`: …; `name?`: …; `namespace?`: …; `prefix?`: …; `wrapped?`: …; }; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: … | … | … | … | … | … | … | …; `allOf?`: …\[]; `anyOf?`: …\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `examples?`: …\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `items?`: { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: …\[]; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `attribute?`: …; `name?`: …; `namespace?`: …; `prefix?`: …; `wrapped?`: …; }; }; `oneOf?`: ({\[`key`: …]: …; \[`key`: …]: …; `description?`: …; `summary?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; })\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: `string`]: {\[`key`: …]: …; \[`key`: …]: …; `description?`: …; `summary?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; }; }; `properties?`: {\[`key`: `string`]: {\[`key`: …]: …; \[`key`: …]: …; `description?`: …; `summary?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; }; }; `readOnly?`: `boolean`; `required?`: `string`\[]; `title?`: `string`; `type?`: `NonArraySchemaObjectType`; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `name?`: `string`; `namespace?`: `string`; `nodeType?`: `XMLNodeType`; `prefix?`: `string`; }; } | {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: `boolean` | {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `description?`: `string`; `summary?`: `string`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `valueOf?`: `boolean`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `valueOf?`: `boolean`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: boolean | { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `allOf?`: …\[]; `anyOf?`: …\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `examples?`: …\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `items?`: … | … | … | … | … | …; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: … | … | … | … | … | …; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: `"array"`; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `attribute?`: …; `name?`: …; `namespace?`: …; `prefix?`: …; `wrapped?`: …; }; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: boolean | { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `allOf?`: …\[]; `anyOf?`: …\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `examples?`: …\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: … | … | … | … | … | …; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: `NonArraySchemaObjectType`; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `attribute?`: …; `name?`: …; `namespace?`: …; `prefix?`: …; `wrapped?`: …; }; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: boolean | { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `allOf?`: …\[]; `anyOf?`: …\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `examples?`: …\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `items?`: … | … | … | … | … | …; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: … | … | … | … | … | …; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: …\[]; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `attribute?`: …; `name?`: …; `namespace?`: …; `prefix?`: …; `wrapped?`: …; }; }; `allOf?`: ({\[`key`: …]: …; \[`key`: …]: …; `description?`: …; `summary?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; })\[]; `anyOf?`: ({\[`key`: …]: …; \[`key`: …]: …; `description?`: …; `summary?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; })\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `defaultMapping?`: `string`; `mapping?`: {\[`key`: `string`]: `string`; }; `propertyName?`: `string`; }; `enum?`: `any`\[]; `example?`: `any`; `examples?`: `object`\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: `string`; `url?`: `string`; }; `format?`: `string`; `items?`: { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `description?`: `string`; `summary?`: `string`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `valueOf?`: `boolean`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `valueOf?`: `boolean`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: … | … | … | … | … | … | … | …; `allOf?`: …\[]; `anyOf?`: …\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `examples?`: …\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `items?`: { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: `"array"`; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `attribute?`: …; `name?`: …; `namespace?`: …; `prefix?`: …; `wrapped?`: …; }; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: … | … | … | … | … | … | … | …; `allOf?`: …\[]; `anyOf?`: …\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `examples?`: …\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: `NonArraySchemaObjectType`; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `attribute?`: …; `name?`: …; `namespace?`: …; `prefix?`: …; `wrapped?`: …; }; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: … | … | … | … | … | … | … | …; `allOf?`: …\[]; `anyOf?`: …\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `examples?`: …\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `items?`: { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: …\[]; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `attribute?`: …; `name?`: …; `namespace?`: …; `prefix?`: …; `wrapped?`: …; }; }; `oneOf?`: ({\[`key`: …]: …; \[`key`: …]: …; `description?`: …; `summary?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; })\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: `string`]: {\[`key`: …]: …; \[`key`: …]: …; `description?`: …; `summary?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; }; }; `properties?`: {\[`key`: `string`]: {\[`key`: …]: …; \[`key`: …]: …; `description?`: …; `summary?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; }; }; `readOnly?`: `boolean`; `required?`: `string`\[]; `title?`: `string`; `type?`: (`"array"` | `NonArraySchemaObjectType`)\[]; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `name?`: `string`; `namespace?`: `string`; `nodeType?`: `XMLNodeType`; `prefix?`: `string`; }; }; `style?`: `ParameterStyle`; })\[]; `requestBody?`: {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `description?`: `string`; `summary?`: `string`; } | { `content?`: {\[`key`: `string`]: {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `description?`: `string`; `summary?`: `string`; } | { `encoding?`: {\[`key`: `string`]: `object`; }; `example?`: `any`; `examples?`: {\[`key`: `string`]: {\[`key`: …]: …; \[`key`: …]: …; `description?`: …; `summary?`: …; } | { `dataValue?`: …; `description?`: …; `externalValue?`: …; `serializedValue?`: …; `summary?`: …; `value?`: …; }; }; `itemEncoding?`: { `allowReserved?`: `boolean`; `contentType?`: `string`; `encoding?`: {\[`key`: `string`]: { style?: string; explode?: boolean; allowReserved?: boolean; contentType?: string; headers?: { \[x: string]: { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { description?: string; … 9 more …; schema?: { …; } | … 4 more … | { …; }; }; }; encoding?: { …; }; prefixEncodi…; }; `explode?`: `boolean`; `headers?`: {\[`key`: `string`]: … | …; }; `itemEncoding?`: { style?: string; explode?: boolean; allowReserved?: boolean; contentType?: string; headers?: { \[x: string]: { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { description?: string; … 9 more …; schema?: { …; } | … 4 more … | { …; }; }; }; encoding?: { …; }; prefixEncodi…; `prefixEncoding?`: { style?: string; explode?: boolean; allowReserved?: boolean; contentType?: string; headers?: { \[x: string]: { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { description?: string; … 9 more …; schema?: { …; } | … 4 more … | { …; }; }; }; encoding?: { …; }; prefixEncodi…\[]; `style?`: `string`; }; `itemSchema?`: {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `description?`: `string`; `summary?`: `string`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `valueOf?`: `boolean`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `valueOf?`: `boolean`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: … | … | … | … | … | … | … | …; `allOf?`: …\[]; `anyOf?`: …\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `defaultMapping?`: …; `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `examples?`: …\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `items?`: { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: … | … | … | … | … | …; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: `"array"`; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `name?`: …; `namespace?`: …; `nodeType?`: …; `prefix?`: …; }; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: … | … | … | … | … | … | … | …; `allOf?`: …\[]; `anyOf?`: …\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `defaultMapping?`: …; `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `examples?`: …\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: … | … | … | … | … | …; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: `NonArraySchemaObjectType`; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `name?`: …; `namespace?`: …; `nodeType?`: …; `prefix?`: …; }; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: … | … | … | … | … | … | … | …; `allOf?`: …\[]; `anyOf?`: …\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `defaultMapping?`: …; `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `examples?`: …\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `items?`: { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: … | … | … | … | … | …; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: …\[]; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `name?`: …; `namespace?`: …; `nodeType?`: …; `prefix?`: …; }; }; `prefixEncoding?`: `object`\[]; `schema?`: {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `description?`: `string`; `summary?`: `string`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `valueOf?`: `boolean`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `valueOf?`: `boolean`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: … | … | … | … | … | … | … | …; `allOf?`: …\[]; `anyOf?`: …\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `defaultMapping?`: …; `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `examples?`: …\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `items?`: { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: … | … | … | … | … | …; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: `"array"`; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `name?`: …; `namespace?`: …; `nodeType?`: …; `prefix?`: …; }; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: … | … | … | … | … | … | … | …; `allOf?`: …\[]; `anyOf?`: …\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `defaultMapping?`: …; `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `examples?`: …\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: … | … | … | … | … | …; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: `NonArraySchemaObjectType`; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `name?`: …; `namespace?`: …; `nodeType?`: …; `prefix?`: …; }; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: … | … | … | … | … | … | … | …; `allOf?`: …\[]; `anyOf?`: …\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `defaultMapping?`: …; `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `examples?`: …\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `items?`: { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: … | … | … | … | … | …; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: …\[]; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `name?`: …; `namespace?`: …; `nodeType?`: …; `prefix?`: …; }; }; }; }; `description?`: `string`; `required?`: `boolean`; }; `responses?`: {\[`key`: `string`]: {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `description?`: `string`; `summary?`: `string`; } | {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `content?`: {\[`key`: `string`]: {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `description?`: `string`; `summary?`: `string`; } | { `encoding?`: {\[`key`: `string`]: `object`; }; `example?`: `any`; `examples?`: {\[`key`: `string`]: … | …; }; `itemEncoding?`: { `allowReserved?`: `boolean`; `contentType?`: `string`; `encoding?`: {\[`key`: …]: …; }; `explode?`: `boolean`; `headers?`: {\[`key`: …]: …; }; `itemEncoding?`: { style?: string; explode?: boolean; allowReserved?: boolean; contentType?: string; headers?: { \[x: string]: { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { description?: string; … 9 more …; schema?: { …; } | … 4 more … | { …; }; }; }; encoding?: { …; }; prefixEncodi…; `prefixEncoding?`: …\[]; `style?`: `string`; }; `itemSchema?`: {\[`key`: …]: …; \[`key`: …]: …; `description?`: …; `summary?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; }; `prefixEncoding?`: `object`\[]; `schema?`: {\[`key`: …]: …; \[`key`: …]: …; `description?`: …; `summary?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; }; }; }; `headers?`: {\[`key`: `string`]: {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `description?`: `string`; `summary?`: `string`; } | { `allowEmptyValue?`: `boolean`; `allowReserved?`: `boolean`; `content?`: {\[`key`: `string`]: … | …; }; `deprecated?`: `boolean`; `description?`: `string`; `example?`: `any`; `examples?`: {\[`key`: `string`]: … | …; }; `explode?`: `boolean`; `required?`: `boolean`; `schema?`: {\[`key`: …]: …; \[`key`: …]: …; `description?`: …; `summary?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; }; `style?`: `ParameterStyle`; }; }; `links?`: {\[`key`: `string`]: {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `description?`: `string`; `summary?`: `string`; } | { `description?`: `string`; `operationId?`: `string`; `operationRef?`: `string`; `parameters?`: {\[`key`: `string`]: `any`; }; `requestBody?`: `any`; `server?`: { `description?`: `string`; `name?`: `string`; `url?`: `string`; `variables?`: {\[`key`: …]: …; }; }; }; }; `summary?`: `string`; }; }; `servers?`: `object`\[]; } #### renderer? [Section titled “renderer?”](#renderer) > `optional` **renderer**: [`JSXRenderer`](/api/type-aliases/jsxrenderer/) Custom renderer for this route. #### requestTimeout? [Section titled “requestTimeout?”](#requesttimeout) > `optional` **requestTimeout**: `number` Timeout for this specific route (milliseconds). #### Inherited from [Section titled “Inherited from”](#inherited-from-4) `ShokupanRouter.config` *** ### metadata? [Section titled “metadata?”](#metadata) > `optional` **metadata**: [`RouteMetadata`](/api/interfaces/routemetadata/) Defined in: [src/router.ts:105](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L105) #### Inherited from [Section titled “Inherited from”](#inherited-from-5) `ShokupanRouter.metadata` *** ### middleware [Section titled “middleware”](#middleware) > **middleware**: [`Middleware`](/api/type-aliases/middleware/)\[] = `[]` Defined in: [src/router.ts:94](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L94) #### Inherited from [Section titled “Inherited from”](#inherited-from-6) `ShokupanRouter.middleware` *** ### requestTimeout? [Section titled “requestTimeout?”](#requesttimeout-1) > `optional` **requestTimeout**: `number` Defined in: [src/router.ts:792](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L792) #### Inherited from [Section titled “Inherited from”](#inherited-from-7) `ShokupanRouter.requestTimeout` ## Accessors [Section titled “Accessors”](#accessors) ### root [Section titled “root”](#root) #### Get Signature [Section titled “Get Signature”](#get-signature) > **get** **root**(): [`Shokupan`](/api/classes/shokupan/)<`any`> Defined in: [src/router.ts:99](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L99) ##### Returns [Section titled “Returns”](#returns-1) [`Shokupan`](/api/classes/shokupan/)<`any`> #### Inherited from [Section titled “Inherited from”](#inherited-from-8) `ShokupanRouter.root` *** ### rootConfig [Section titled “rootConfig”](#rootconfig) #### Get Signature [Section titled “Get Signature”](#get-signature-1) > **get** **rootConfig**(): `object` Defined in: [src/router.ts:96](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L96) ##### Returns [Section titled “Returns”](#returns-2) ###### autoBackpressureFeedback? [Section titled “autoBackpressureFeedback?”](#autobackpressurefeedback-1) > `optional` **autoBackpressureFeedback**: `boolean` Whether to enable automatic backpressure based on system CPU load. ###### Default [Section titled “Default”](#default-2) ```ts false ``` ###### autoBackpressureLevel? [Section titled “autoBackpressureLevel?”](#autobackpressurelevel-1) > `optional` **autoBackpressureLevel**: `number` The CPU usage percentage threshold (0-100) at which to start rejecting requests (429). ###### Default [Section titled “Default”](#default-3) ```ts 60 ``` ###### controllersOnly? [Section titled “controllersOnly?”](#controllersonly-1) > `optional` **controllersOnly**: `boolean` Whether to enforce that only controller classes (constructors) are accepted by the router. ###### Default [Section titled “Default”](#default-4) ```ts false ``` ###### development? [Section titled “development?”](#development) > `optional` **development**: `boolean` Whether to run in development mode. ###### Default [Section titled “Default”](#default-5) ```ts process.env.NODE_ENV !== "production" ``` ###### enableAsyncLocalStorage? [Section titled “enableAsyncLocalStorage?”](#enableasynclocalstorage) > `optional` **enableAsyncLocalStorage**: `boolean` Whether to enable AsyncLocalStorage. (Request local storage) ###### Default [Section titled “Default”](#default-6) ```ts false ``` ###### enableMiddlewareTracking? [Section titled “enableMiddlewareTracking?”](#enablemiddlewaretracking) > `optional` **enableMiddlewareTracking**: `boolean` Whether to enable middleware and handler tracking. When enabled, `ctx.handlerStack` will be populated with the handlers the request has passed through. Also, `ctx.state` will be a Proxy that tracks changes made by each handler. ###### Default [Section titled “Default”](#default-7) ```ts false ``` ###### enableOpenApiGen? [Section titled “enableOpenApiGen?”](#enableopenapigen) > `optional` **enableOpenApiGen**: `boolean` Whether to enable OpenAPI generation. ###### Default [Section titled “Default”](#default-8) ```ts true ``` ###### enableTracing? [Section titled “enableTracing?”](#enabletracing) > `optional` **enableTracing**: `boolean` Whether to enable OpenTelemetry tracing. ###### Default [Section titled “Default”](#default-9) ```ts false ``` ###### hooks? [Section titled “hooks?”](#hooks-1) > `optional` **hooks**: { `afterValidate?`: (`ctx`, `data`) => `void` | `Promise`<`void`>; `beforeValidate?`: (`ctx`, `data`) => `void` | `Promise`<`void`>; `onError?`: (`ctx`, `error`) => `void` | `Promise`<`void`>; `onReadTimeout?`: (`ctx`) => `void` | `Promise`<`void`>; `onRequestEnd?`: (`ctx`) => `void` | `Promise`<`void`>; `onRequestStart?`: (`ctx`) => `void` | `Promise`<`void`>; `onRequestTimeout?`: (`ctx`) => `void` | `Promise`<`void`>; `onResponseEnd?`: (`ctx`, `response`) => `void` | `Promise`<`void`>; `onResponseStart?`: (`ctx`, `response`) => `void` | `Promise`<`void`>; `onWriteTimeout?`: (`ctx`) => `void` | `Promise`<`void`>; } | `object`\[] Lifecycle hooks. ###### hostname? [Section titled “hostname?”](#hostname) > `optional` **hostname**: `string` The hostname to be used for the server. ###### Default [Section titled “Default”](#default-10) ```ts "localhost" ``` ###### httpLogger()? [Section titled “httpLogger()?”](#httplogger) > `optional` **httpLogger**: (`ctx`) => `void` HTTP logger function. ###### Parameters [Section titled “Parameters”](#parameters-1) ###### ctx [Section titled “ctx”](#ctx) [`ShokupanContext`](/api/classes/shokupancontext/)<`Record`<`string`, `any`>> ###### Returns [Section titled “Returns”](#returns-3) `void` ###### jsonParser? [Section titled “jsonParser?”](#jsonparser) > `optional` **jsonParser**: `"native"` | `"parse-json"` | `"secure-json-parse"` JSON parser to use for parsing request bodies. Options: * `'native'`: Use the built-in JSON.parse (fastest, default) * `'parse-json'`: Use the parse-json library for better error messages with minimal performance overhead (\~5% slower than native) * `'secure-json-parse'`: Use secure-json-parse for protection against prototype pollution (20-30% slower than native) Performance implications based on benchmarks: * `native`: Fastest option, excellent for production * `parse-json`: Nearly identical performance to native with better error messages, good for development * `secure-json-parse`: Provides security at the cost of performance, use only for untrusted input ###### Default [Section titled “Default”](#default-11) ```ts 'native' ``` ###### logger? [Section titled “logger?”](#logger) > `optional` **logger**: `object` Logger object. ###### logger.debug()? [Section titled “logger.debug()?”](#loggerdebug) > `optional` **debug**: (`msg`, `props`) => `void` ###### Parameters [Section titled “Parameters”](#parameters-2) ###### msg [Section titled “msg”](#msg) `string` ###### props [Section titled “props”](#props) `Record`<`string`, `any`> ###### Returns [Section titled “Returns”](#returns-4) `void` ###### logger.error()? [Section titled “logger.error()?”](#loggererror) > `optional` **error**: (`msg`, `props`) => `void` ###### Parameters [Section titled “Parameters”](#parameters-3) ###### msg [Section titled “msg”](#msg-1) `string` ###### props [Section titled “props”](#props-1) `Record`<`string`, `any`> ###### Returns [Section titled “Returns”](#returns-5) `void` ###### logger.fatal()? [Section titled “logger.fatal()?”](#loggerfatal) > `optional` **fatal**: (`msg`, `props`) => `void` Something fatally went wrong and the application cannot continue. ###### Parameters [Section titled “Parameters”](#parameters-4) ###### msg [Section titled “msg”](#msg-2) `string` ###### props [Section titled “props”](#props-2) `Record`<`string`, `any`> ###### Returns [Section titled “Returns”](#returns-6) `void` ###### logger.info()? [Section titled “logger.info()?”](#loggerinfo) > `optional` **info**: (`msg`, `props`) => `void` ###### Parameters [Section titled “Parameters”](#parameters-5) ###### msg [Section titled “msg”](#msg-3) `string` ###### props [Section titled “props”](#props-3) `Record`<`string`, `any`> ###### Returns [Section titled “Returns”](#returns-7) `void` ###### logger.verbose? [Section titled “logger.verbose?”](#loggerverbose) > `optional` **verbose**: `boolean` ###### logger.warning()? [Section titled “logger.warning()?”](#loggerwarning) > `optional` **warning**: (`msg`, `props`) => `void` ###### Parameters [Section titled “Parameters”](#parameters-6) ###### msg [Section titled “msg”](#msg-4) `string` ###### props [Section titled “props”](#props-4) `Record`<`string`, `any`> ###### Returns [Section titled “Returns”](#returns-8) `void` ###### middlewareTrackingMaxCapacity? [Section titled “middlewareTrackingMaxCapacity?”](#middlewaretrackingmaxcapacity) > `optional` **middlewareTrackingMaxCapacity**: `number` Maximum number of middleware executions to store in the datastore. Only applies when enableMiddlewareTracking is true. ###### Default [Section titled “Default”](#default-12) ```ts 10000 ``` ###### middlewareTrackingTTL? [Section titled “middlewareTrackingTTL?”](#middlewaretrackingttl) > `optional` **middlewareTrackingTTL**: `number` Time-to-live for middleware tracking entries in milliseconds. Entries older than this will be cleaned up. Only applies when enableMiddlewareTracking is true. ###### Default [Section titled “Default”](#default-13) ```ts 86400000 (1 day) ``` ###### port? [Section titled “port?”](#port) > `optional` **port**: `number` The port to be used for the server. ###### Default [Section titled “Default”](#default-14) ```ts 3000 ``` ###### readTimeout? [Section titled “readTimeout?”](#readtimeout) > `optional` **readTimeout**: `number` Timeout for reading the request body (milliseconds). Maps to Bun’s `idleTimeout`. ###### Default [Section titled “Default”](#default-15) ```ts 30000 ``` ###### renderer? [Section titled “renderer?”](#renderer-1) > `optional` **renderer**: [`JSXRenderer`](/api/type-aliases/jsxrenderer/) JSX Rendering function. ###### requestTimeout? [Section titled “requestTimeout?”](#requesttimeout-2) > `optional` **requestTimeout**: `number` Timeout for processing the request (milliseconds). Maps to `server.timeout(req, seconds)`. ###### Default [Section titled “Default”](#default-16) ```ts 0 (disabled) ``` ###### reusePort? [Section titled “reusePort?”](#reuseport) > `optional` **reusePort**: `boolean` Whether to reuse the port. ###### Default [Section titled “Default”](#default-17) ```ts false ``` ###### serverFactory? [Section titled “serverFactory?”](#serverfactory) > `optional` **serverFactory**: [`ServerFactory`](/api/interfaces/serverfactory/) Factory function to create the server instance. Defaults to Bun.serve. ###### validateStatusCodes? [Section titled “validateStatusCodes?”](#validatestatuscodes) > `optional` **validateStatusCodes**: `boolean` Whether to validate response status codes. ###### Default [Section titled “Default”](#default-18) ```ts true ``` ###### writeTimeout? [Section titled “writeTimeout?”](#writetimeout) > `optional` **writeTimeout**: `number` Timeout for writing the response (milliseconds). Not currently supported by Bun.serve natively. Experimental This API should not be used in production and may be trimmed from a public release. #### Inherited from [Section titled “Inherited from”](#inherited-from-9) `ShokupanRouter.rootConfig` ## Methods [Section titled “Methods”](#methods) ### add() [Section titled “add()”](#add) > **add**(`arg`): `AuthPlugin` Defined in: [src/router.ts:808](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L808) Adds a route to the router. #### Parameters [Section titled “Parameters”](#parameters-7) ##### arg [Section titled “arg”](#arg) Route configuration object ###### controller? [Section titled “controller?”](#controller) `any` Controller for the route ###### group? [Section titled “group?”](#group-1) `string` Group for the route ###### handler [Section titled “handler”](#handler) [`ShokupanHandler`](/api/type-aliases/shokupanhandler/)<`any`> Route handler function ###### method [Section titled “method”](#method) [`Method`](/api/type-aliases/method/) HTTP method ###### path [Section titled “path”](#path) `string` URL path ###### regex? [Section titled “regex?”](#regex) `RegExp` Custom regex for path matching ###### renderer? [Section titled “renderer?”](#renderer-2) [`JSXRenderer`](/api/type-aliases/jsxrenderer/) JSX renderer for the route ###### requestTimeout? [Section titled “requestTimeout?”](#requesttimeout-3) `number` Timeout for this route in milliseconds ###### spec? [Section titled “spec?”](#spec) [`MethodAPISpec`](/api/type-aliases/methodapispec/) OpenAPI specification for the route #### Returns [Section titled “Returns”](#returns-9) `AuthPlugin` #### Inherited from [Section titled “Inherited from”](#inherited-from-10) `ShokupanRouter.add` *** ### delete() [Section titled “delete()”](#delete) #### Call Signature [Section titled “Call Signature”](#call-signature) > **delete**<`Path`>(`path`, …`handlers`): `any` Defined in: [src/router.ts:1079](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L1079) Adds a DELETE route to the router. ##### Type Parameters [Section titled “Type Parameters”](#type-parameters) ###### Path [Section titled “Path”](#path-1) `Path` *extends* `string` ##### Parameters [Section titled “Parameters”](#parameters-8) ###### path [Section titled “path”](#path-2) `Path` URL path ###### handlers [Section titled “handlers”](#handlers) …[`ShokupanHandler`](/api/type-aliases/shokupanhandler/)<`any`, [`RouteParams`](/api/type-aliases/routeparams/)<`Path`>>\[] Route handler functions ##### Returns [Section titled “Returns”](#returns-10) `any` ##### Inherited from [Section titled “Inherited from”](#inherited-from-11) `ShokupanRouter.delete` #### Call Signature [Section titled “Call Signature”](#call-signature-1) > **delete**<`Path`>(`path`, `spec`, …`handlers`): `any` Defined in: [src/router.ts:1087](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L1087) Adds a DELETE route to the router. ##### Type Parameters [Section titled “Type Parameters”](#type-parameters-1) ###### Path [Section titled “Path”](#path-3) `Path` *extends* `string` ##### Parameters [Section titled “Parameters”](#parameters-9) ###### path [Section titled “path”](#path-4) `Path` URL path ###### spec [Section titled “spec”](#spec-1) [`MethodAPISpec`](/api/type-aliases/methodapispec/) OpenAPI specification for the route ###### handlers [Section titled “handlers”](#handlers-1) …[`ShokupanHandler`](/api/type-aliases/shokupanhandler/)<`any`, [`RouteParams`](/api/type-aliases/routeparams/)<`Path`>>\[] Route handler functions ##### Returns [Section titled “Returns”](#returns-11) `any` ##### Inherited from [Section titled “Inherited from”](#inherited-from-12) `ShokupanRouter.delete` *** ### find() [Section titled “find()”](#find) > **find**(`method`, `path`): `object` Defined in: [src/router.ts:726](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L726) Find a route matching the given method and path. #### Parameters [Section titled “Parameters”](#parameters-10) ##### method [Section titled “method”](#method-1) `string` HTTP method ##### path [Section titled “path”](#path-5) `string` Request path #### Returns [Section titled “Returns”](#returns-12) `object` Route handler and parameters if found, otherwise null ##### handler [Section titled “handler”](#handler-1) > **handler**: [`ShokupanHandler`](/api/type-aliases/shokupanhandler/)<`any`> ##### params [Section titled “params”](#params) > **params**: `Record`<`string`, `string`> #### Inherited from [Section titled “Inherited from”](#inherited-from-13) `ShokupanRouter.find` *** ### generateApiSpec() [Section titled “generateApiSpec()”](#generateapispec) > **generateApiSpec**(`options`): `any` Defined in: [src/router.ts:1306](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L1306) Generates an OpenAPI 3.1 Document by recursing through the router and its descendants. Now includes runtime analysis of handler functions to infer request/response types. #### Parameters [Section titled “Parameters”](#parameters-11) ##### options [Section titled “options”](#options) [`OpenAPIOptions`](/api/interfaces/openapioptions/) = `{}` #### Returns [Section titled “Returns”](#returns-13) `any` #### Inherited from [Section titled “Inherited from”](#inherited-from-14) `ShokupanRouter.generateApiSpec` *** ### get() [Section titled “get()”](#get) #### Call Signature [Section titled “Call Signature”](#call-signature-2) > **get**<`Path`>(`path`, …`handlers`): `any` Defined in: [src/router.ts:1019](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L1019) Adds a GET route to the router. ##### Type Parameters [Section titled “Type Parameters”](#type-parameters-2) ###### Path [Section titled “Path”](#path-6) `Path` *extends* `string` ##### Parameters [Section titled “Parameters”](#parameters-12) ###### path [Section titled “path”](#path-7) `Path` URL path ###### handlers [Section titled “handlers”](#handlers-2) …[`ShokupanHandler`](/api/type-aliases/shokupanhandler/)<`any`, [`RouteParams`](/api/type-aliases/routeparams/)<`Path`>>\[] Route handler functions ##### Returns [Section titled “Returns”](#returns-14) `any` ##### Inherited from [Section titled “Inherited from”](#inherited-from-15) `ShokupanRouter.get` #### Call Signature [Section titled “Call Signature”](#call-signature-3) > **get**<`Path`>(`path`, `spec`, …`handlers`): `any` Defined in: [src/router.ts:1027](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L1027) Adds a GET route to the router. ##### Type Parameters [Section titled “Type Parameters”](#type-parameters-3) ###### Path [Section titled “Path”](#path-8) `Path` *extends* `string` ##### Parameters [Section titled “Parameters”](#parameters-13) ###### path [Section titled “path”](#path-9) `Path` URL path ###### spec [Section titled “spec”](#spec-2) [`MethodAPISpec`](/api/type-aliases/methodapispec/) OpenAPI specification for the route ###### handlers [Section titled “handlers”](#handlers-3) …[`ShokupanHandler`](/api/type-aliases/shokupanhandler/)<`any`, [`RouteParams`](/api/type-aliases/routeparams/)<`Path`>>\[] Route handler functions ##### Returns [Section titled “Returns”](#returns-15) `any` ##### Inherited from [Section titled “Inherited from”](#inherited-from-16) `ShokupanRouter.get` *** ### getComponentRegistry() [Section titled “getComponentRegistry()”](#getcomponentregistry) > **getComponentRegistry**(): `object` Defined in: [src/router.ts:110](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L110) #### Returns [Section titled “Returns”](#returns-16) `object` ##### controllers [Section titled “controllers”](#controllers) > **controllers**: `object`\[] ##### metadata [Section titled “metadata”](#metadata-1) > **metadata**: [`RouteMetadata`](/api/interfaces/routemetadata/) ##### middleware [Section titled “middleware”](#middleware-1) > **middleware**: `object`\[] ##### routers [Section titled “routers”](#routers) > **routers**: `object`\[] ##### routes [Section titled “routes”](#routes-1) > **routes**: `object`\[] #### Inherited from [Section titled “Inherited from”](#inherited-from-17) `ShokupanRouter.getComponentRegistry` *** ### getMiddleware() [Section titled “getMiddleware()”](#getmiddleware) > **getMiddleware**(): (`ctx`, `next`) => `Promise`<`any`> Defined in: [src/plugins/application/auth.ts:393](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/application/auth.ts#L393) Middleware to verify JWT #### Returns [Section titled “Returns”](#returns-17) > (`ctx`, `next`): `Promise`<`any`> ##### Parameters [Section titled “Parameters”](#parameters-14) ###### ctx [Section titled “ctx”](#ctx-1) [`ShokupanContext`](/api/classes/shokupancontext/) ###### next [Section titled “next”](#next) () => `Promise`<`any`> ##### Returns [Section titled “Returns”](#returns-18) `Promise`<`any`> *** ### getRoutes() [Section titled “getRoutes()”](#getroutes) > **getRoutes**(): `object`\[] Defined in: [src/router.ts:229](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L229) Returns all routes attached to this router and its descendants. #### Returns [Section titled “Returns”](#returns-19) `object`\[] #### Inherited from [Section titled “Inherited from”](#inherited-from-18) `ShokupanRouter.getRoutes` *** ### guard() [Section titled “guard()”](#guard) #### Call Signature [Section titled “Call Signature”](#call-signature-4) > **guard**(`handler`): `void` Defined in: [src/router.ts:1159](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L1159) Adds a guard to the router that applies to all routes added **after** this point. Guards must return true or call `ctx.next()` to allow the request to continue. ##### Parameters [Section titled “Parameters”](#parameters-15) ###### handler [Section titled “handler”](#handler-2) [`ShokupanHandler`](/api/type-aliases/shokupanhandler/)<`any`> Guard handler function ##### Returns [Section titled “Returns”](#returns-20) `void` ##### Inherited from [Section titled “Inherited from”](#inherited-from-19) `ShokupanRouter.guard` #### Call Signature [Section titled “Call Signature”](#call-signature-5) > **guard**(`spec`, `handler`): `any` Defined in: [src/router.ts:1167](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L1167) Adds a guard to the router that applies to all routes added **after** this point. Guards must return true or call `ctx.next()` to allow the request to continue. ##### Parameters [Section titled “Parameters”](#parameters-16) ###### spec [Section titled “spec”](#spec-3) [`GuardAPISpec`](/api/type-aliases/guardapispec/) OpenAPI specification for the guard ###### handler [Section titled “handler”](#handler-3) [`ShokupanHandler`](/api/type-aliases/shokupanhandler/)<`any`> Guard handler function ##### Returns [Section titled “Returns”](#returns-21) `any` ##### Inherited from [Section titled “Inherited from”](#inherited-from-20) `ShokupanRouter.guard` *** ### head() [Section titled “head()”](#head) #### Call Signature [Section titled “Call Signature”](#call-signature-6) > **head**<`Path`>(`path`, …`handlers`): `any` Defined in: [src/router.ts:1139](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L1139) Adds a HEAD route to the router. ##### Type Parameters [Section titled “Type Parameters”](#type-parameters-4) ###### Path [Section titled “Path”](#path-10) `Path` *extends* `string` ##### Parameters [Section titled “Parameters”](#parameters-17) ###### path [Section titled “path”](#path-11) `Path` URL path ###### handlers [Section titled “handlers”](#handlers-4) …[`ShokupanHandler`](/api/type-aliases/shokupanhandler/)<`any`, [`RouteParams`](/api/type-aliases/routeparams/)<`Path`>>\[] Route handler functions ##### Returns [Section titled “Returns”](#returns-22) `any` ##### Inherited from [Section titled “Inherited from”](#inherited-from-21) `ShokupanRouter.head` #### Call Signature [Section titled “Call Signature”](#call-signature-7) > **head**<`Path`>(`path`, `spec`, …`handlers`): `any` Defined in: [src/router.ts:1147](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L1147) Adds a HEAD route to the router. ##### Type Parameters [Section titled “Type Parameters”](#type-parameters-5) ###### Path [Section titled “Path”](#path-12) `Path` *extends* `string` ##### Parameters [Section titled “Parameters”](#parameters-18) ###### path [Section titled “path”](#path-13) `Path` URL path ###### spec [Section titled “spec”](#spec-4) [`MethodAPISpec`](/api/type-aliases/methodapispec/) OpenAPI specification for the route ###### handlers [Section titled “handlers”](#handlers-5) …[`ShokupanHandler`](/api/type-aliases/shokupanhandler/)<`any`, [`RouteParams`](/api/type-aliases/routeparams/)<`Path`>>\[] Route handler functions ##### Returns [Section titled “Returns”](#returns-23) `any` ##### Inherited from [Section titled “Inherited from”](#inherited-from-22) `ShokupanRouter.head` *** ### internalRequest() [Section titled “internalRequest()”](#internalrequest) > **internalRequest**(`arg`): `Promise`<`Response`> Defined in: [src/router.ts:261](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L261) Makes an internal request through this router’s full routing pipeline. This is useful for calling other routes internally and supports streaming responses. #### Parameters [Section titled “Parameters”](#parameters-19) ##### arg [Section titled “arg”](#arg-1) `string` | { `body?`: `any`; `headers?`: [`HeadersInit`](/api/type-aliases/headersinit/); `method?`: [`Method`](/api/type-aliases/method/); `path`: `string`; } #### Returns [Section titled “Returns”](#returns-24) `Promise`<`Response`> The raw Response object. #### Inherited from [Section titled “Inherited from”](#inherited-from-23) `ShokupanRouter.internalRequest` *** ### mount() [Section titled “mount()”](#mount) > **mount**(`prefix`, `controller`): `AuthPlugin` Defined in: [src/router.ts:205](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L205) Mounts a controller instance to a path prefix. Controller can be a convection router or an arbitrary class. Routes are derived from method names: * get(ctx) -> GET /prefix/ * getUsers(ctx) -> GET /prefix/users * postCreate(ctx) -> POST /prefix/create #### Parameters [Section titled “Parameters”](#parameters-20) ##### prefix [Section titled “prefix”](#prefix) `string` ##### controller [Section titled “controller”](#controller-1) `Record`<`string`, `any`> | `ShokupanRouter`<`any`> | [`ShokupanController`](/api/type-aliases/shokupancontroller/) | `ShokupanRouter`<`Record`<`string`, `any`>> | [`ShokupanController`](/api/type-aliases/shokupancontroller/)<`any`> #### Returns [Section titled “Returns”](#returns-25) `AuthPlugin` #### Inherited from [Section titled “Inherited from”](#inherited-from-24) `ShokupanRouter.mount` *** ### onInit() [Section titled “onInit()”](#oninit) > **onInit**(`app`, `options?`): `void` Defined in: [src/plugins/application/auth.ts:140](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/application/auth.ts#L140) #### Parameters [Section titled “Parameters”](#parameters-21) ##### app [Section titled “app”](#app) [`Shokupan`](/api/classes/shokupan/) ##### options? [Section titled “options?”](#options-1) [`ShokupanPluginOptions`](/api/interfaces/shokupanpluginoptions/) #### Returns [Section titled “Returns”](#returns-26) `void` #### Implementation of [Section titled “Implementation of”](#implementation-of) [`ShokupanPlugin`](/api/interfaces/shokupanplugin/).[`onInit`](/api/interfaces/shokupanplugin/#oninit) *** ### options() [Section titled “options()”](#options-2) #### Call Signature [Section titled “Call Signature”](#call-signature-8) > **options**<`Path`>(`path`, …`handlers`): `any` Defined in: [src/router.ts:1119](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L1119) Adds a OPTIONS route to the router. ##### Type Parameters [Section titled “Type Parameters”](#type-parameters-6) ###### Path [Section titled “Path”](#path-14) `Path` *extends* `string` ##### Parameters [Section titled “Parameters”](#parameters-22) ###### path [Section titled “path”](#path-15) `Path` URL path ###### handlers [Section titled “handlers”](#handlers-6) …[`ShokupanHandler`](/api/type-aliases/shokupanhandler/)<`any`, [`RouteParams`](/api/type-aliases/routeparams/)<`Path`>>\[] Route handler functions ##### Returns [Section titled “Returns”](#returns-27) `any` ##### Inherited from [Section titled “Inherited from”](#inherited-from-25) `ShokupanRouter.options` #### Call Signature [Section titled “Call Signature”](#call-signature-9) > **options**<`Path`>(`path`, `spec`, …`handlers`): `any` Defined in: [src/router.ts:1127](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L1127) Adds a OPTIONS route to the router. ##### Type Parameters [Section titled “Type Parameters”](#type-parameters-7) ###### Path [Section titled “Path”](#path-16) `Path` *extends* `string` ##### Parameters [Section titled “Parameters”](#parameters-23) ###### path [Section titled “path”](#path-17) `Path` URL path ###### spec [Section titled “spec”](#spec-5) [`MethodAPISpec`](/api/type-aliases/methodapispec/) OpenAPI specification for the route ###### handlers [Section titled “handlers”](#handlers-7) …[`ShokupanHandler`](/api/type-aliases/shokupanhandler/)<`any`, [`RouteParams`](/api/type-aliases/routeparams/)<`Path`>>\[] Route handler functions ##### Returns [Section titled “Returns”](#returns-28) `any` ##### Inherited from [Section titled “Inherited from”](#inherited-from-26) `ShokupanRouter.options` *** ### patch() [Section titled “patch()”](#patch) #### Call Signature [Section titled “Call Signature”](#call-signature-10) > **patch**<`Path`>(`path`, …`handlers`): `any` Defined in: [src/router.ts:1099](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L1099) Adds a PATCH route to the router. ##### Type Parameters [Section titled “Type Parameters”](#type-parameters-8) ###### Path [Section titled “Path”](#path-18) `Path` *extends* `string` ##### Parameters [Section titled “Parameters”](#parameters-24) ###### path [Section titled “path”](#path-19) `Path` URL path ###### handlers [Section titled “handlers”](#handlers-8) …[`ShokupanHandler`](/api/type-aliases/shokupanhandler/)<`any`, [`RouteParams`](/api/type-aliases/routeparams/)<`Path`>>\[] Route handler functions ##### Returns [Section titled “Returns”](#returns-29) `any` ##### Inherited from [Section titled “Inherited from”](#inherited-from-27) `ShokupanRouter.patch` #### Call Signature [Section titled “Call Signature”](#call-signature-11) > **patch**<`Path`>(`path`, `spec`, …`handlers`): `any` Defined in: [src/router.ts:1107](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L1107) Adds a PATCH route to the router. ##### Type Parameters [Section titled “Type Parameters”](#type-parameters-9) ###### Path [Section titled “Path”](#path-20) `Path` *extends* `string` ##### Parameters [Section titled “Parameters”](#parameters-25) ###### path [Section titled “path”](#path-21) `Path` URL path ###### spec [Section titled “spec”](#spec-6) [`MethodAPISpec`](/api/type-aliases/methodapispec/) OpenAPI specification for the route ###### handlers [Section titled “handlers”](#handlers-9) …[`ShokupanHandler`](/api/type-aliases/shokupanhandler/)<`any`, [`RouteParams`](/api/type-aliases/routeparams/)<`Path`>>\[] Route handler functions ##### Returns [Section titled “Returns”](#returns-30) `any` ##### Inherited from [Section titled “Inherited from”](#inherited-from-28) `ShokupanRouter.patch` *** ### post() [Section titled “post()”](#post) #### Call Signature [Section titled “Call Signature”](#call-signature-12) > **post**<`Path`>(`path`, …`handlers`): `any` Defined in: [src/router.ts:1039](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L1039) Adds a POST route to the router. ##### Type Parameters [Section titled “Type Parameters”](#type-parameters-10) ###### Path [Section titled “Path”](#path-22) `Path` *extends* `string` ##### Parameters [Section titled “Parameters”](#parameters-26) ###### path [Section titled “path”](#path-23) `Path` URL path ###### handlers [Section titled “handlers”](#handlers-10) …[`ShokupanHandler`](/api/type-aliases/shokupanhandler/)<`any`, [`RouteParams`](/api/type-aliases/routeparams/)<`Path`>>\[] Route handler functions ##### Returns [Section titled “Returns”](#returns-31) `any` ##### Inherited from [Section titled “Inherited from”](#inherited-from-29) `ShokupanRouter.post` #### Call Signature [Section titled “Call Signature”](#call-signature-13) > **post**<`Path`>(`path`, `spec`, …`handlers`): `any` Defined in: [src/router.ts:1047](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L1047) Adds a POST route to the router. ##### Type Parameters [Section titled “Type Parameters”](#type-parameters-11) ###### Path [Section titled “Path”](#path-24) `Path` *extends* `string` ##### Parameters [Section titled “Parameters”](#parameters-27) ###### path [Section titled “path”](#path-25) `Path` URL path ###### spec [Section titled “spec”](#spec-7) [`MethodAPISpec`](/api/type-aliases/methodapispec/) OpenAPI specification for the route ###### handlers [Section titled “handlers”](#handlers-11) …[`ShokupanHandler`](/api/type-aliases/shokupanhandler/)<`any`, [`RouteParams`](/api/type-aliases/routeparams/)<`Path`>>\[] Route handler functions ##### Returns [Section titled “Returns”](#returns-32) `any` ##### Inherited from [Section titled “Inherited from”](#inherited-from-30) `ShokupanRouter.post` *** ### put() [Section titled “put()”](#put) #### Call Signature [Section titled “Call Signature”](#call-signature-14) > **put**<`Path`>(`path`, …`handlers`): `any` Defined in: [src/router.ts:1059](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L1059) Adds a PUT route to the router. ##### Type Parameters [Section titled “Type Parameters”](#type-parameters-12) ###### Path [Section titled “Path”](#path-26) `Path` *extends* `string` ##### Parameters [Section titled “Parameters”](#parameters-28) ###### path [Section titled “path”](#path-27) `Path` URL path ###### handlers [Section titled “handlers”](#handlers-12) …[`ShokupanHandler`](/api/type-aliases/shokupanhandler/)<`any`, [`RouteParams`](/api/type-aliases/routeparams/)<`Path`>>\[] Route handler functions ##### Returns [Section titled “Returns”](#returns-33) `any` ##### Inherited from [Section titled “Inherited from”](#inherited-from-31) `ShokupanRouter.put` #### Call Signature [Section titled “Call Signature”](#call-signature-15) > **put**<`Path`>(`path`, `spec`, …`handlers`): `any` Defined in: [src/router.ts:1067](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L1067) Adds a PUT route to the router. ##### Type Parameters [Section titled “Type Parameters”](#type-parameters-13) ###### Path [Section titled “Path”](#path-28) `Path` *extends* `string` ##### Parameters [Section titled “Parameters”](#parameters-29) ###### path [Section titled “path”](#path-29) `Path` URL path ###### spec [Section titled “spec”](#spec-8) [`MethodAPISpec`](/api/type-aliases/methodapispec/) OpenAPI specification for the route ###### handlers [Section titled “handlers”](#handlers-13) …[`ShokupanHandler`](/api/type-aliases/shokupanhandler/)<`any`, [`RouteParams`](/api/type-aliases/routeparams/)<`Path`>>\[] Route handler functions ##### Returns [Section titled “Returns”](#returns-34) `any` ##### Inherited from [Section titled “Inherited from”](#inherited-from-32) `ShokupanRouter.put` *** ### runHooks() [Section titled “runHooks()”](#runhooks) > **runHooks**(`name`, …`args`): `Promise`<`void`> Defined in: [src/router.ts:1339](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L1339) #### Parameters [Section titled “Parameters”](#parameters-30) ##### name [Section titled “name”](#name-1) keyof [`ShokupanHooks`](/api/interfaces/shokupanhooks/)<`any`> ##### args [Section titled “args”](#args) …`any`\[] #### Returns [Section titled “Returns”](#returns-35) `Promise`<`void`> #### Inherited from [Section titled “Inherited from”](#inherited-from-33) `ShokupanRouter.runHooks` *** ### static() [Section titled “static()”](#static) > **static**(`uriPath`, `options`): `AuthPlugin` Defined in: [src/router.ts:1217](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L1217) Statically serves a directory with standard options. #### Parameters [Section titled “Parameters”](#parameters-31) ##### uriPath [Section titled “uriPath”](#uripath) `string` URL path prefix ##### options [Section titled “options”](#options-3) Configuration options or root directory string `string` | [`StaticServeOptions`](/api/interfaces/staticserveoptions/)<`any`> #### Returns [Section titled “Returns”](#returns-36) `AuthPlugin` #### Inherited from [Section titled “Inherited from”](#inherited-from-34) `ShokupanRouter.static` *** ### testRequest() [Section titled “testRequest()”](#testrequest) > **testRequest**(`options`): `Promise`<[`ProcessResult`](/api/interfaces/processresult/)> Defined in: [src/router.ts:293](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L293) Processes a request for testing purposes. Returns a simplified { status, headers, data } object instead of a Response. #### Parameters [Section titled “Parameters”](#parameters-32) ##### options [Section titled “options”](#options-4) [`RequestOptions`](/api/interfaces/requestoptions/) #### Returns [Section titled “Returns”](#returns-37) `Promise`<[`ProcessResult`](/api/interfaces/processresult/)> #### Inherited from [Section titled “Inherited from”](#inherited-from-35) `ShokupanRouter.testRequest`
# ClusterPlugin
Defined in: [src/plugins/application/cluster.ts:34](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/application/cluster.ts#L34) Cluster Plugin Automatically manages clustering for Node.js and Bun. ## Implements [Section titled “Implements”](#implements) * [`ShokupanPlugin`](/api/interfaces/shokupanplugin/) ## Constructors [Section titled “Constructors”](#constructors) ### Constructor [Section titled “Constructor”](#constructor) > **new ClusterPlugin**(`options`): `ClusterPlugin` Defined in: [src/plugins/application/cluster.ts:35](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/application/cluster.ts#L35) #### Parameters [Section titled “Parameters”](#parameters) ##### options [Section titled “options”](#options) [`ClusterOptions`](/api/interfaces/clusteroptions/) = `{}` #### Returns [Section titled “Returns”](#returns) `ClusterPlugin` ## Methods [Section titled “Methods”](#methods) ### onInit() [Section titled “onInit()”](#oninit) > **onInit**(`app`): `void` Defined in: [src/plugins/application/cluster.ts:37](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/application/cluster.ts#L37) #### Parameters [Section titled “Parameters”](#parameters-1) ##### app [Section titled “app”](#app) [`Shokupan`](/api/classes/shokupan/) #### Returns [Section titled “Returns”](#returns-1) `void` #### Implementation of [Section titled “Implementation of”](#implementation-of) [`ShokupanPlugin`](/api/interfaces/shokupanplugin/).[`onInit`](/api/interfaces/shokupanplugin/#oninit)
# Container
Defined in: [src/util/di.ts:5](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/di.ts#L5) Simple Dependency Injection Container ## Constructors [Section titled “Constructors”](#constructors) ### Constructor [Section titled “Constructor”](#constructor) > **new Container**(): `Container` #### Returns [Section titled “Returns”](#returns) `Container` ## Methods [Section titled “Methods”](#methods) ### get() [Section titled “get()”](#get) > `static` **get**<`T`>(`target`): `T` Defined in: [src/util/di.ts:12](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/di.ts#L12) #### Type Parameters [Section titled “Type Parameters”](#type-parameters) ##### T [Section titled “T”](#t) `T` #### Parameters [Section titled “Parameters”](#parameters) ##### target [Section titled “target”](#target) (…`args`) => `T` #### Returns [Section titled “Returns”](#returns-1) `T` *** ### has() [Section titled “has()”](#has) > `static` **has**(`target`): `boolean` Defined in: [src/util/di.ts:16](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/di.ts#L16) #### Parameters [Section titled “Parameters”](#parameters-1) ##### target [Section titled “target”](#target-1) `any` #### Returns [Section titled “Returns”](#returns-2) `boolean` *** ### register() [Section titled “register()”](#register) > `static` **register**<`T`>(`target`, `instance`): `void` Defined in: [src/util/di.ts:8](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/di.ts#L8) #### Type Parameters [Section titled “Type Parameters”](#type-parameters-1) ##### T [Section titled “T”](#t-1) `T` #### Parameters [Section titled “Parameters”](#parameters-2) ##### target [Section titled “target”](#target-2) (…`args`) => `T` ##### instance [Section titled “instance”](#instance) `T` #### Returns [Section titled “Returns”](#returns-3) `void` *** ### resolve() [Section titled “resolve()”](#resolve) > `static` **resolve**<`T`>(`target`): `T` Defined in: [src/util/di.ts:20](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/di.ts#L20) #### Type Parameters [Section titled “Type Parameters”](#type-parameters-2) ##### T [Section titled “T”](#t-2) `T` #### Parameters [Section titled “Parameters”](#parameters-3) ##### target [Section titled “target”](#target-3) (…`args`) => `T` #### Returns [Section titled “Returns”](#returns-4) `T`
# MemoryStore
Defined in: [src/plugins/middleware/session.ts:187](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/session.ts#L187) ## Extends [Section titled “Extends”](#extends) * `EventEmitter` ## Implements [Section titled “Implements”](#implements) * [`Store`](/api/interfaces/store/) ## Constructors [Section titled “Constructors”](#constructors) ### Constructor [Section titled “Constructor”](#constructor) > **new MemoryStore**(`options?`): `MemoryStore` Defined in: node\_modules/@types/node/events.d.ts:134 #### Parameters [Section titled “Parameters”](#parameters) ##### options? [Section titled “options?”](#options) `EventEmitterOptions` #### Returns [Section titled “Returns”](#returns) `MemoryStore` #### Inherited from [Section titled “Inherited from”](#inherited-from) `EventEmitter.constructor` ## Properties [Section titled “Properties”](#properties) ### captureRejections [Section titled “captureRejections”](#capturerejections) > `static` **captureRejections**: `boolean` Defined in: node\_modules/@types/node/events.d.ts:458 Value: [boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Boolean_type) Change the default `captureRejections` option on all new `EventEmitter` objects. #### Since [Section titled “Since”](#since) v13.4.0, v12.16.0 #### Inherited from [Section titled “Inherited from”](#inherited-from-1) `EventEmitter.captureRejections` *** ### captureRejectionSymbol [Section titled “captureRejectionSymbol”](#capturerejectionsymbol) > `readonly` `static` **captureRejectionSymbol**: *typeof* [`captureRejectionSymbol`](/api/classes/memorystore/#capturerejectionsymbol) Defined in: node\_modules/@types/node/events.d.ts:451 Value: `Symbol.for('nodejs.rejection')` See how to write a custom `rejection handler`. #### Since [Section titled “Since”](#since-1) v13.4.0, v12.16.0 #### Inherited from [Section titled “Inherited from”](#inherited-from-2) `EventEmitter.captureRejectionSymbol` *** ### defaultMaxListeners [Section titled “defaultMaxListeners”](#defaultmaxlisteners) > `static` **defaultMaxListeners**: `number` Defined in: node\_modules/@types/node/events.d.ts:497 By default, a maximum of `10` listeners can be registered for any single event. This limit can be changed for individual `EventEmitter` instances using the `emitter.setMaxListeners(n)` method. To change the default for *all*`EventEmitter` instances, the `events.defaultMaxListeners` property can be used. If this value is not a positive number, a `RangeError` is thrown. Take caution when setting the `events.defaultMaxListeners` because the change affects *all* `EventEmitter` instances, including those created before the change is made. However, calling `emitter.setMaxListeners(n)` still has precedence over `events.defaultMaxListeners`. This is not a hard limit. The `EventEmitter` instance will allow more listeners to be added but will output a trace warning to stderr indicating that a “possible EventEmitter memory leak” has been detected. For any single `EventEmitter`, the `emitter.getMaxListeners()` and `emitter.setMaxListeners()` methods can be used to temporarily avoid this warning: ```js import { EventEmitter } from 'node:events'; const emitter = new EventEmitter(); emitter.setMaxListeners(emitter.getMaxListeners() + 1); emitter.once('event', () => { // do stuff emitter.setMaxListeners(Math.max(emitter.getMaxListeners() - 1, 0)); }); ``` The `--trace-warnings` command-line flag can be used to display the stack trace for such warnings. The emitted warning can be inspected with `process.on('warning')` and will have the additional `emitter`, `type`, and `count` properties, referring to the event emitter instance, the event’s name and the number of attached listeners, respectively. Its `name` property is set to `'MaxListenersExceededWarning'`. #### Since [Section titled “Since”](#since-2) v0.11.2 #### Inherited from [Section titled “Inherited from”](#inherited-from-3) `EventEmitter.defaultMaxListeners` *** ### errorMonitor [Section titled “errorMonitor”](#errormonitor) > `readonly` `static` **errorMonitor**: *typeof* [`errorMonitor`](/api/classes/memorystore/#errormonitor) Defined in: node\_modules/@types/node/events.d.ts:444 This symbol shall be used to install a listener for only monitoring `'error'` events. Listeners installed using this symbol are called before the regular `'error'` listeners are called. Installing a listener using this symbol does not change the behavior once an `'error'` event is emitted. Therefore, the process will still crash if no regular `'error'` listener is installed. #### Since [Section titled “Since”](#since-3) v13.6.0, v12.17.0 #### Inherited from [Section titled “Inherited from”](#inherited-from-4) `EventEmitter.errorMonitor` ## Methods [Section titled “Methods”](#methods) ### \[captureRejectionSymbol]\()? [Section titled “\[captureRejectionSymbol\]()?”](#capturerejectionsymbol-1) > `optional` **\[captureRejectionSymbol]**<`K`>(`error`, `event`, …`args`): `void` Defined in: node\_modules/@types/node/events.d.ts:136 #### Type Parameters [Section titled “Type Parameters”](#type-parameters) ##### K [Section titled “K”](#k) `K` #### Parameters [Section titled “Parameters”](#parameters-1) ##### error [Section titled “error”](#error) `Error` ##### event [Section titled “event”](#event) `string` | `symbol` ##### args [Section titled “args”](#args) …`AnyRest` #### Returns [Section titled “Returns”](#returns-1) `void` #### Implementation of [Section titled “Implementation of”](#implementation-of) [`Store`](/api/interfaces/store/).[`[captureRejectionSymbol]`](/api/interfaces/store/#capturerejectionsymbol) #### Inherited from [Section titled “Inherited from”](#inherited-from-5) `EventEmitter.[captureRejectionSymbol]` *** ### addListener() [Section titled “addListener()”](#addlistener) > **addListener**<`K`>(`eventName`, `listener`): `this` Defined in: node\_modules/@types/node/events.d.ts:596 Alias for `emitter.on(eventName, listener)`. #### Type Parameters [Section titled “Type Parameters”](#type-parameters-1) ##### K [Section titled “K”](#k-1) `K` #### Parameters [Section titled “Parameters”](#parameters-2) ##### eventName [Section titled “eventName”](#eventname) `string` | `symbol` ##### listener [Section titled “listener”](#listener) (…`args`) => `void` #### Returns [Section titled “Returns”](#returns-2) `this` #### Since [Section titled “Since”](#since-4) v0.1.26 #### Implementation of [Section titled “Implementation of”](#implementation-of-1) [`Store`](/api/interfaces/store/).[`addListener`](/api/interfaces/store/#addlistener) #### Inherited from [Section titled “Inherited from”](#inherited-from-6) `EventEmitter.addListener` *** ### all() [Section titled “all()”](#all) > **all**(`cb`): `void` Defined in: [src/plugins/middleware/session.ts:225](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/session.ts#L225) Retrieves all sessions. #### Parameters [Section titled “Parameters”](#parameters-3) ##### cb [Section titled “cb”](#cb) (`err`, `obj?`) => `void` #### Returns [Section titled “Returns”](#returns-3) `void` #### Implementation of [Section titled “Implementation of”](#implementation-of-2) [`Store`](/api/interfaces/store/).[`all`](/api/interfaces/store/#all) *** ### clear() [Section titled “clear()”](#clear) > **clear**(`cb?`): `void` Defined in: [src/plugins/middleware/session.ts:237](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/session.ts#L237) Clears all sessions. #### Parameters [Section titled “Parameters”](#parameters-4) ##### cb? [Section titled “cb?”](#cb-1) (`err?`) => `void` #### Returns [Section titled “Returns”](#returns-4) `void` #### Implementation of [Section titled “Implementation of”](#implementation-of-3) [`Store`](/api/interfaces/store/).[`clear`](/api/interfaces/store/#clear) *** ### destroy() [Section titled “destroy()”](#destroy) > **destroy**(`sid`, `cb?`): `void` Defined in: [src/plugins/middleware/session.ts:210](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/session.ts#L210) Destroys a session. #### Parameters [Section titled “Parameters”](#parameters-5) ##### sid [Section titled “sid”](#sid) `string` ##### cb? [Section titled “cb?”](#cb-2) (`err?`) => `void` #### Returns [Section titled “Returns”](#returns-5) `void` #### Implementation of [Section titled “Implementation of”](#implementation-of-4) [`Store`](/api/interfaces/store/).[`destroy`](/api/interfaces/store/#destroy) *** ### emit() [Section titled “emit()”](#emit) > **emit**<`K`>(`eventName`, …`args`): `boolean` Defined in: node\_modules/@types/node/events.d.ts:858 Synchronously calls each of the listeners registered for the event named `eventName`, in the order they were registered, passing the supplied arguments to each. Returns `true` if the event had listeners, `false` otherwise. ```js import { EventEmitter } from 'node:events'; const myEmitter = new EventEmitter(); // First listener myEmitter.on('event', function firstListener() { console.log('Helloooo! first listener'); }); // Second listener myEmitter.on('event', function secondListener(arg1, arg2) { console.log(`event with parameters ${arg1}, ${arg2} in second listener`); }); // Third listener myEmitter.on('event', function thirdListener(...args) { const parameters = args.join(', '); console.log(`event with parameters ${parameters} in third listener`); }); console.log(myEmitter.listeners('event')); myEmitter.emit('event', 1, 2, 3, 4, 5); // Prints: // [ // [Function: firstListener], // [Function: secondListener], // [Function: thirdListener] // ] // Helloooo! first listener // event with parameters 1, 2 in second listener // event with parameters 1, 2, 3, 4, 5 in third listener ``` #### Type Parameters [Section titled “Type Parameters”](#type-parameters-2) ##### K [Section titled “K”](#k-2) `K` #### Parameters [Section titled “Parameters”](#parameters-6) ##### eventName [Section titled “eventName”](#eventname-1) `string` | `symbol` ##### args [Section titled “args”](#args-1) …`AnyRest` #### Returns [Section titled “Returns”](#returns-6) `boolean` #### Since [Section titled “Since”](#since-5) v0.1.26 #### Implementation of [Section titled “Implementation of”](#implementation-of-5) [`Store`](/api/interfaces/store/).[`emit`](/api/interfaces/store/#emit) #### Inherited from [Section titled “Inherited from”](#inherited-from-7) `EventEmitter.emit` *** ### eventNames() [Section titled “eventNames()”](#eventnames) > **eventNames**(): (`string` | `symbol`)\[] Defined in: node\_modules/@types/node/events.d.ts:921 Returns an array listing the events for which the emitter has registered listeners. The values in the array are strings or `Symbol`s. ```js import { EventEmitter } from 'node:events'; const myEE = new EventEmitter(); myEE.on('foo', () => {}); myEE.on('bar', () => {}); const sym = Symbol('symbol'); myEE.on(sym, () => {}); console.log(myEE.eventNames()); // Prints: [ 'foo', 'bar', Symbol(symbol) ] ``` #### Returns [Section titled “Returns”](#returns-7) (`string` | `symbol`)\[] #### Since [Section titled “Since”](#since-6) v6.0.0 #### Implementation of [Section titled “Implementation of”](#implementation-of-6) [`Store`](/api/interfaces/store/).[`eventNames`](/api/interfaces/store/#eventnames) #### Inherited from [Section titled “Inherited from”](#inherited-from-8) `EventEmitter.eventNames` *** ### get() [Section titled “get()”](#get) > **get**(`sid`, `cb`): `void` Defined in: [src/plugins/middleware/session.ts:190](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/session.ts#L190) Retrieves a session by ID. #### Parameters [Section titled “Parameters”](#parameters-7) ##### sid [Section titled “sid”](#sid-1) `string` ##### cb [Section titled “cb”](#cb-3) (`err`, `session?`) => `void` #### Returns [Section titled “Returns”](#returns-8) `void` #### Implementation of [Section titled “Implementation of”](#implementation-of-7) [`Store`](/api/interfaces/store/).[`get`](/api/interfaces/store/#get) *** ### getMaxListeners() [Section titled “getMaxListeners()”](#getmaxlisteners) > **getMaxListeners**(): `number` Defined in: node\_modules/@types/node/events.d.ts:773 Returns the current max listener value for the `EventEmitter` which is either set by `emitter.setMaxListeners(n)` or defaults to [EventEmitter.defaultMaxListeners](/api/classes/memorystore/#defaultmaxlisteners). #### Returns [Section titled “Returns”](#returns-9) `number` #### Since [Section titled “Since”](#since-7) v1.0.0 #### Implementation of [Section titled “Implementation of”](#implementation-of-8) [`Store`](/api/interfaces/store/).[`getMaxListeners`](/api/interfaces/store/#getmaxlisteners) #### Inherited from [Section titled “Inherited from”](#inherited-from-9) `EventEmitter.getMaxListeners` *** ### listenerCount() [Section titled “listenerCount()”](#listenercount) > **listenerCount**<`K`>(`eventName`, `listener?`): `number` Defined in: node\_modules/@types/node/events.d.ts:867 Returns the number of listeners listening for the event named `eventName`. If `listener` is provided, it will return how many times the listener is found in the list of the listeners of the event. #### Type Parameters [Section titled “Type Parameters”](#type-parameters-3) ##### K [Section titled “K”](#k-3) `K` #### Parameters [Section titled “Parameters”](#parameters-8) ##### eventName [Section titled “eventName”](#eventname-2) The name of the event being listened for `string` | `symbol` ##### listener? [Section titled “listener?”](#listener-1) `Function` The event handler function #### Returns [Section titled “Returns”](#returns-10) `number` #### Since [Section titled “Since”](#since-8) v3.2.0 #### Implementation of [Section titled “Implementation of”](#implementation-of-9) [`Store`](/api/interfaces/store/).[`listenerCount`](/api/interfaces/store/#listenercount) #### Inherited from [Section titled “Inherited from”](#inherited-from-10) `EventEmitter.listenerCount` *** ### listeners() [Section titled “listeners()”](#listeners) > **listeners**<`K`>(`eventName`): `Function`\[] Defined in: node\_modules/@types/node/events.d.ts:786 Returns a copy of the array of listeners for the event named `eventName`. ```js server.on('connection', (stream) => { console.log('someone connected!'); }); console.log(util.inspect(server.listeners('connection'))); // Prints: [ [Function] ] ``` #### Type Parameters [Section titled “Type Parameters”](#type-parameters-4) ##### K [Section titled “K”](#k-4) `K` #### Parameters [Section titled “Parameters”](#parameters-9) ##### eventName [Section titled “eventName”](#eventname-3) `string` | `symbol` #### Returns [Section titled “Returns”](#returns-11) `Function`\[] #### Since [Section titled “Since”](#since-9) v0.1.26 #### Implementation of [Section titled “Implementation of”](#implementation-of-10) [`Store`](/api/interfaces/store/).[`listeners`](/api/interfaces/store/#listeners) #### Inherited from [Section titled “Inherited from”](#inherited-from-11) `EventEmitter.listeners` *** ### off() [Section titled “off()”](#off) > **off**<`K`>(`eventName`, `listener`): `this` Defined in: node\_modules/@types/node/events.d.ts:746 Alias for `emitter.removeListener()`. #### Type Parameters [Section titled “Type Parameters”](#type-parameters-5) ##### K [Section titled “K”](#k-5) `K` #### Parameters [Section titled “Parameters”](#parameters-10) ##### eventName [Section titled “eventName”](#eventname-4) `string` | `symbol` ##### listener [Section titled “listener”](#listener-2) (…`args`) => `void` #### Returns [Section titled “Returns”](#returns-12) `this` #### Since [Section titled “Since”](#since-10) v10.0.0 #### Implementation of [Section titled “Implementation of”](#implementation-of-11) [`Store`](/api/interfaces/store/).[`off`](/api/interfaces/store/#off) #### Inherited from [Section titled “Inherited from”](#inherited-from-12) `EventEmitter.off` *** ### on() [Section titled “on()”](#on) > **on**<`K`>(`eventName`, `listener`): `this` Defined in: node\_modules/@types/node/events.d.ts:628 Adds the `listener` function to the end of the listeners array for the event named `eventName`. No checks are made to see if the `listener` has already been added. Multiple calls passing the same combination of `eventName` and `listener` will result in the `listener` being added, and called, multiple times. ```js server.on('connection', (stream) => { console.log('someone connected!'); }); ``` Returns a reference to the `EventEmitter`, so that calls can be chained. By default, event listeners are invoked in the order they are added. The `emitter.prependListener()` method can be used as an alternative to add the event listener to the beginning of the listeners array. ```js import { EventEmitter } from 'node:events'; const myEE = new EventEmitter(); myEE.on('foo', () => console.log('a')); myEE.prependListener('foo', () => console.log('b')); myEE.emit('foo'); // Prints: // b // a ``` #### Type Parameters [Section titled “Type Parameters”](#type-parameters-6) ##### K [Section titled “K”](#k-6) `K` #### Parameters [Section titled “Parameters”](#parameters-11) ##### eventName [Section titled “eventName”](#eventname-5) The name of the event. `string` | `symbol` ##### listener [Section titled “listener”](#listener-3) (…`args`) => `void` The callback function #### Returns [Section titled “Returns”](#returns-13) `this` #### Since [Section titled “Since”](#since-11) v0.1.101 #### Implementation of [Section titled “Implementation of”](#implementation-of-12) [`Store`](/api/interfaces/store/).[`on`](/api/interfaces/store/#on) #### Inherited from [Section titled “Inherited from”](#inherited-from-13) `EventEmitter.on` *** ### once() [Section titled “once()”](#once) > **once**<`K`>(`eventName`, `listener`): `this` Defined in: node\_modules/@types/node/events.d.ts:658 Adds a **one-time** `listener` function for the event named `eventName`. The next time `eventName` is triggered, this listener is removed and then invoked. ```js server.once('connection', (stream) => { console.log('Ah, we have our first user!'); }); ``` Returns a reference to the `EventEmitter`, so that calls can be chained. By default, event listeners are invoked in the order they are added. The `emitter.prependOnceListener()` method can be used as an alternative to add the event listener to the beginning of the listeners array. ```js import { EventEmitter } from 'node:events'; const myEE = new EventEmitter(); myEE.once('foo', () => console.log('a')); myEE.prependOnceListener('foo', () => console.log('b')); myEE.emit('foo'); // Prints: // b // a ``` #### Type Parameters [Section titled “Type Parameters”](#type-parameters-7) ##### K [Section titled “K”](#k-7) `K` #### Parameters [Section titled “Parameters”](#parameters-12) ##### eventName [Section titled “eventName”](#eventname-6) The name of the event. `string` | `symbol` ##### listener [Section titled “listener”](#listener-4) (…`args`) => `void` The callback function #### Returns [Section titled “Returns”](#returns-14) `this` #### Since [Section titled “Since”](#since-12) v0.3.0 #### Implementation of [Section titled “Implementation of”](#implementation-of-13) [`Store`](/api/interfaces/store/).[`once`](/api/interfaces/store/#once) #### Inherited from [Section titled “Inherited from”](#inherited-from-14) `EventEmitter.once` *** ### prependListener() [Section titled “prependListener()”](#prependlistener) > **prependListener**<`K`>(`eventName`, `listener`): `this` Defined in: node\_modules/@types/node/events.d.ts:885 Adds the `listener` function to the *beginning* of the listeners array for the event named `eventName`. No checks are made to see if the `listener` has already been added. Multiple calls passing the same combination of `eventName` and `listener` will result in the `listener` being added, and called, multiple times. ```js server.prependListener('connection', (stream) => { console.log('someone connected!'); }); ``` Returns a reference to the `EventEmitter`, so that calls can be chained. #### Type Parameters [Section titled “Type Parameters”](#type-parameters-8) ##### K [Section titled “K”](#k-8) `K` #### Parameters [Section titled “Parameters”](#parameters-13) ##### eventName [Section titled “eventName”](#eventname-7) The name of the event. `string` | `symbol` ##### listener [Section titled “listener”](#listener-5) (…`args`) => `void` The callback function #### Returns [Section titled “Returns”](#returns-15) `this` #### Since [Section titled “Since”](#since-13) v6.0.0 #### Implementation of [Section titled “Implementation of”](#implementation-of-14) [`Store`](/api/interfaces/store/).[`prependListener`](/api/interfaces/store/#prependlistener) #### Inherited from [Section titled “Inherited from”](#inherited-from-15) `EventEmitter.prependListener` *** ### prependOnceListener() [Section titled “prependOnceListener()”](#prependoncelistener) > **prependOnceListener**<`K`>(`eventName`, `listener`): `this` Defined in: node\_modules/@types/node/events.d.ts:901 Adds a **one-time**`listener` function for the event named `eventName` to the *beginning* of the listeners array. The next time `eventName` is triggered, this listener is removed, and then invoked. ```js server.prependOnceListener('connection', (stream) => { console.log('Ah, we have our first user!'); }); ``` Returns a reference to the `EventEmitter`, so that calls can be chained. #### Type Parameters [Section titled “Type Parameters”](#type-parameters-9) ##### K [Section titled “K”](#k-9) `K` #### Parameters [Section titled “Parameters”](#parameters-14) ##### eventName [Section titled “eventName”](#eventname-8) The name of the event. `string` | `symbol` ##### listener [Section titled “listener”](#listener-6) (…`args`) => `void` The callback function #### Returns [Section titled “Returns”](#returns-16) `this` #### Since [Section titled “Since”](#since-14) v6.0.0 #### Implementation of [Section titled “Implementation of”](#implementation-of-15) [`Store`](/api/interfaces/store/).[`prependOnceListener`](/api/interfaces/store/#prependoncelistener) #### Inherited from [Section titled “Inherited from”](#inherited-from-16) `EventEmitter.prependOnceListener` *** ### rawListeners() [Section titled “rawListeners()”](#rawlisteners) > **rawListeners**<`K`>(`eventName`): `Function`\[] Defined in: node\_modules/@types/node/events.d.ts:817 Returns a copy of the array of listeners for the event named `eventName`, including any wrappers (such as those created by `.once()`). ```js import { EventEmitter } from 'node:events'; const emitter = new EventEmitter(); emitter.once('log', () => console.log('log once')); // Returns a new Array with a function `onceWrapper` which has a property // `listener` which contains the original listener bound above const listeners = emitter.rawListeners('log'); const logFnWrapper = listeners[0]; // Logs "log once" to the console and does not unbind the `once` event logFnWrapper.listener(); // Logs "log once" to the console and removes the listener logFnWrapper(); emitter.on('log', () => console.log('log persistently')); // Will return a new Array with a single function bound by `.on()` above const newListeners = emitter.rawListeners('log'); // Logs "log persistently" twice newListeners[0](); emitter.emit('log'); ``` #### Type Parameters [Section titled “Type Parameters”](#type-parameters-10) ##### K [Section titled “K”](#k-10) `K` #### Parameters [Section titled “Parameters”](#parameters-15) ##### eventName [Section titled “eventName”](#eventname-9) `string` | `symbol` #### Returns [Section titled “Returns”](#returns-17) `Function`\[] #### Since [Section titled “Since”](#since-15) v9.4.0 #### Implementation of [Section titled “Implementation of”](#implementation-of-16) [`Store`](/api/interfaces/store/).[`rawListeners`](/api/interfaces/store/#rawlisteners) #### Inherited from [Section titled “Inherited from”](#inherited-from-17) `EventEmitter.rawListeners` *** ### removeAllListeners() [Section titled “removeAllListeners()”](#removealllisteners) > **removeAllListeners**(`eventName?`): `this` Defined in: node\_modules/@types/node/events.d.ts:757 Removes all listeners, or those of the specified `eventName`. It is bad practice to remove listeners added elsewhere in the code, particularly when the `EventEmitter` instance was created by some other component or module (e.g. sockets or file streams). Returns a reference to the `EventEmitter`, so that calls can be chained. #### Parameters [Section titled “Parameters”](#parameters-16) ##### eventName? [Section titled “eventName?”](#eventname-10) `string` | `symbol` #### Returns [Section titled “Returns”](#returns-18) `this` #### Since [Section titled “Since”](#since-16) v0.1.26 #### Implementation of [Section titled “Implementation of”](#implementation-of-17) [`Store`](/api/interfaces/store/).[`removeAllListeners`](/api/interfaces/store/#removealllisteners) #### Inherited from [Section titled “Inherited from”](#inherited-from-18) `EventEmitter.removeAllListeners` *** ### removeListener() [Section titled “removeListener()”](#removelistener) > **removeListener**<`K`>(`eventName`, `listener`): `this` Defined in: node\_modules/@types/node/events.d.ts:741 Removes the specified `listener` from the listener array for the event named `eventName`. ```js const callback = (stream) => { console.log('someone connected!'); }; server.on('connection', callback); // ... server.removeListener('connection', callback); ``` `removeListener()` will remove, at most, one instance of a listener from the listener array. If any single listener has been added multiple times to the listener array for the specified `eventName`, then `removeListener()` must be called multiple times to remove each instance. Once an event is emitted, all listeners attached to it at the time of emitting are called in order. This implies that any `removeListener()` or `removeAllListeners()` calls *after* emitting and *before* the last listener finishes execution will not remove them from`emit()` in progress. Subsequent events behave as expected. ```js import { EventEmitter } from 'node:events'; class MyEmitter extends EventEmitter {} const myEmitter = new MyEmitter(); const callbackA = () => { console.log('A'); myEmitter.removeListener('event', callbackB); }; const callbackB = () => { console.log('B'); }; myEmitter.on('event', callbackA); myEmitter.on('event', callbackB); // callbackA removes listener callbackB but it will still be called. // Internal listener array at time of emit [callbackA, callbackB] myEmitter.emit('event'); // Prints: // A // B // callbackB is now removed. // Internal listener array [callbackA] myEmitter.emit('event'); // Prints: // A ``` Because listeners are managed using an internal array, calling this will change the position indices of any listener registered *after* the listener being removed. This will not impact the order in which listeners are called, but it means that any copies of the listener array as returned by the `emitter.listeners()` method will need to be recreated. When a single function has been added as a handler multiple times for a single event (as in the example below), `removeListener()` will remove the most recently added instance. In the example the `once('ping')` listener is removed: ```js import { EventEmitter } from 'node:events'; const ee = new EventEmitter(); function pong() { console.log('pong'); } ee.on('ping', pong); ee.once('ping', pong); ee.removeListener('ping', pong); ee.emit('ping'); ee.emit('ping'); ``` Returns a reference to the `EventEmitter`, so that calls can be chained. #### Type Parameters [Section titled “Type Parameters”](#type-parameters-11) ##### K [Section titled “K”](#k-11) `K` #### Parameters [Section titled “Parameters”](#parameters-17) ##### eventName [Section titled “eventName”](#eventname-11) `string` | `symbol` ##### listener [Section titled “listener”](#listener-7) (…`args`) => `void` #### Returns [Section titled “Returns”](#returns-19) `this` #### Since [Section titled “Since”](#since-17) v0.1.26 #### Implementation of [Section titled “Implementation of”](#implementation-of-18) [`Store`](/api/interfaces/store/).[`removeListener`](/api/interfaces/store/#removelistener) #### Inherited from [Section titled “Inherited from”](#inherited-from-19) `EventEmitter.removeListener` *** ### set() [Section titled “set()”](#set) > **set**(`sid`, `sess`, `cb?`): `void` Defined in: [src/plugins/middleware/session.ts:205](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/session.ts#L205) Stores a session. #### Parameters [Section titled “Parameters”](#parameters-18) ##### sid [Section titled “sid”](#sid-2) `string` ##### sess [Section titled “sess”](#sess) [`SessionData`](/api/interfaces/sessiondata/) ##### cb? [Section titled “cb?”](#cb-4) (`err?`) => `void` #### Returns [Section titled “Returns”](#returns-20) `void` #### Implementation of [Section titled “Implementation of”](#implementation-of-19) [`Store`](/api/interfaces/store/).[`set`](/api/interfaces/store/#set) *** ### setMaxListeners() [Section titled “setMaxListeners()”](#setmaxlisteners) > **setMaxListeners**(`n`): `this` Defined in: node\_modules/@types/node/events.d.ts:767 By default `EventEmitter`s will print a warning if more than `10` listeners are added for a particular event. This is a useful default that helps finding memory leaks. The `emitter.setMaxListeners()` method allows the limit to be modified for this specific `EventEmitter` instance. The value can be set to `Infinity` (or `0`) to indicate an unlimited number of listeners. Returns a reference to the `EventEmitter`, so that calls can be chained. #### Parameters [Section titled “Parameters”](#parameters-19) ##### n [Section titled “n”](#n) `number` #### Returns [Section titled “Returns”](#returns-21) `this` #### Since [Section titled “Since”](#since-18) v0.3.5 #### Implementation of [Section titled “Implementation of”](#implementation-of-20) [`Store`](/api/interfaces/store/).[`setMaxListeners`](/api/interfaces/store/#setmaxlisteners) #### Inherited from [Section titled “Inherited from”](#inherited-from-20) `EventEmitter.setMaxListeners` *** ### touch() [Section titled “touch()”](#touch) > **touch**(`sid`, `sess`, `cb?`): `void` Defined in: [src/plugins/middleware/session.ts:215](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/session.ts#L215) Touches a session. #### Parameters [Section titled “Parameters”](#parameters-20) ##### sid [Section titled “sid”](#sid-3) `string` ##### sess [Section titled “sess”](#sess-1) [`SessionData`](/api/interfaces/sessiondata/) ##### cb? [Section titled “cb?”](#cb-5) (`err?`) => `void` #### Returns [Section titled “Returns”](#returns-22) `void` #### Implementation of [Section titled “Implementation of”](#implementation-of-21) [`Store`](/api/interfaces/store/).[`touch`](/api/interfaces/store/#touch) *** ### addAbortListener() [Section titled “addAbortListener()”](#addabortlistener) > `static` **addAbortListener**(`signal`, `resource`): `Disposable` Defined in: node\_modules/@types/node/events.d.ts:436 Listens once to the `abort` event on the provided `signal`. Listening to the `abort` event on abort signals is unsafe and may lead to resource leaks since another third party with the signal can call `e.stopImmediatePropagation()`. Unfortunately Node.js cannot change this since it would violate the web standard. Additionally, the original API makes it easy to forget to remove listeners. This API allows safely using `AbortSignal`s in Node.js APIs by solving these two issues by listening to the event such that `stopImmediatePropagation` does not prevent the listener from running. Returns a disposable so that it may be unsubscribed from more easily. ```js import { addAbortListener } from 'node:events'; function example(signal) { let disposable; try { signal.addEventListener('abort', (e) => e.stopImmediatePropagation()); disposable = addAbortListener(signal, (e) => { // Do something when signal is aborted. }); } finally { disposable?.[Symbol.dispose](); } } ``` #### Parameters [Section titled “Parameters”](#parameters-21) ##### signal [Section titled “signal”](#signal) `AbortSignal` ##### resource [Section titled “resource”](#resource) (`event`) => `void` #### Returns [Section titled “Returns”](#returns-23) `Disposable` Disposable that removes the `abort` listener. #### Since [Section titled “Since”](#since-19) v20.5.0 #### Inherited from [Section titled “Inherited from”](#inherited-from-21) `EventEmitter.addAbortListener` *** ### getEventListeners() [Section titled “getEventListeners()”](#geteventlisteners) > `static` **getEventListeners**(`emitter`, `name`): `Function`\[] Defined in: node\_modules/@types/node/events.d.ts:358 Returns a copy of the array of listeners for the event named `eventName`. For `EventEmitter`s this behaves exactly the same as calling `.listeners` on the emitter. For `EventTarget`s this is the only way to get the event listeners for the event target. This is useful for debugging and diagnostic purposes. ```js import { getEventListeners, EventEmitter } from 'node:events'; { const ee = new EventEmitter(); const listener = () => console.log('Events are fun'); ee.on('foo', listener); console.log(getEventListeners(ee, 'foo')); // [ [Function: listener] ] } { const et = new EventTarget(); const listener = () => console.log('Events are fun'); et.addEventListener('foo', listener); console.log(getEventListeners(et, 'foo')); // [ [Function: listener] ] } ``` #### Parameters [Section titled “Parameters”](#parameters-22) ##### emitter [Section titled “emitter”](#emitter) `EventTarget` | `EventEmitter`<`DefaultEventMap`> ##### name [Section titled “name”](#name) `string` | `symbol` #### Returns [Section titled “Returns”](#returns-24) `Function`\[] #### Since [Section titled “Since”](#since-20) v15.2.0, v14.17.0 #### Inherited from [Section titled “Inherited from”](#inherited-from-22) `EventEmitter.getEventListeners` *** ### getMaxListeners() [Section titled “getMaxListeners()”](#getmaxlisteners-1) > `static` **getMaxListeners**(`emitter`): `number` Defined in: node\_modules/@types/node/events.d.ts:387 Returns the currently set max amount of listeners. For `EventEmitter`s this behaves exactly the same as calling `.getMaxListeners` on the emitter. For `EventTarget`s this is the only way to get the max event listeners for the event target. If the number of event handlers on a single EventTarget exceeds the max set, the EventTarget will print a warning. ```js import { getMaxListeners, setMaxListeners, EventEmitter } from 'node:events'; { const ee = new EventEmitter(); console.log(getMaxListeners(ee)); // 10 setMaxListeners(11, ee); console.log(getMaxListeners(ee)); // 11 } { const et = new EventTarget(); console.log(getMaxListeners(et)); // 10 setMaxListeners(11, et); console.log(getMaxListeners(et)); // 11 } ``` #### Parameters [Section titled “Parameters”](#parameters-23) ##### emitter [Section titled “emitter”](#emitter-1) `EventTarget` | `EventEmitter`<`DefaultEventMap`> #### Returns [Section titled “Returns”](#returns-25) `number` #### Since [Section titled “Since”](#since-21) v19.9.0 #### Inherited from [Section titled “Inherited from”](#inherited-from-23) `EventEmitter.getMaxListeners` *** ### ~~listenerCount()~~ [Section titled “listenerCount()”](#listenercount-1) > `static` **listenerCount**(`emitter`, `eventName`): `number` Defined in: node\_modules/@types/node/events.d.ts:330 A class method that returns the number of listeners for the given `eventName` registered on the given `emitter`. ```js import { EventEmitter, listenerCount } from 'node:events'; const myEmitter = new EventEmitter(); myEmitter.on('event', () => {}); myEmitter.on('event', () => {}); console.log(listenerCount(myEmitter, 'event')); // Prints: 2 ``` Deprecated Since v3.2.0 - Use `listenerCount` instead. #### Parameters [Section titled “Parameters”](#parameters-24) ##### emitter [Section titled “emitter”](#emitter-2) `EventEmitter` The emitter to query ##### eventName [Section titled “eventName”](#eventname-12) The event name `string` | `symbol` #### Returns [Section titled “Returns”](#returns-26) `number` #### Since [Section titled “Since”](#since-22) v0.9.12 #### Inherited from [Section titled “Inherited from”](#inherited-from-24) `EventEmitter.listenerCount` *** ### on() [Section titled “on()”](#on-1) #### Call Signature [Section titled “Call Signature”](#call-signature) > `static` **on**(`emitter`, `eventName`, `options?`): `AsyncIterator`<`any`\[]> Defined in: node\_modules/@types/node/events.d.ts:303 ```js import { on, EventEmitter } from 'node:events'; import process from 'node:process'; const ee = new EventEmitter(); // Emit later on process.nextTick(() => { ee.emit('foo', 'bar'); ee.emit('foo', 42); }); for await (const event of on(ee, 'foo')) { // The execution of this inner block is synchronous and it // processes one event at a time (even with await). Do not use // if concurrent execution is required. console.log(event); // prints ['bar'] [42] } // Unreachable here ``` Returns an `AsyncIterator` that iterates `eventName` events. It will throw if the `EventEmitter` emits `'error'`. It removes all listeners when exiting the loop. The `value` returned by each iteration is an array composed of the emitted event arguments. An `AbortSignal` can be used to cancel waiting on events: ```js import { on, EventEmitter } from 'node:events'; import process from 'node:process'; const ac = new AbortController(); (async () => { const ee = new EventEmitter(); // Emit later on process.nextTick(() => { ee.emit('foo', 'bar'); ee.emit('foo', 42); }); for await (const event of on(ee, 'foo', { signal: ac.signal })) { // The execution of this inner block is synchronous and it // processes one event at a time (even with await). Do not use // if concurrent execution is required. console.log(event); // prints ['bar'] [42] } // Unreachable here })(); process.nextTick(() => ac.abort()); ``` Use the `close` option to specify an array of event names that will end the iteration: ```js import { on, EventEmitter } from 'node:events'; import process from 'node:process'; const ee = new EventEmitter(); // Emit later on process.nextTick(() => { ee.emit('foo', 'bar'); ee.emit('foo', 42); ee.emit('close'); }); for await (const event of on(ee, 'foo', { close: ['close'] })) { console.log(event); // prints ['bar'] [42] } // the loop will exit after 'close' is emitted console.log('done'); // prints 'done' ``` ##### Parameters [Section titled “Parameters”](#parameters-25) ###### emitter [Section titled “emitter”](#emitter-3) `EventEmitter` ###### eventName [Section titled “eventName”](#eventname-13) `string` | `symbol` ###### options? [Section titled “options?”](#options-1) `StaticEventEmitterIteratorOptions` ##### Returns [Section titled “Returns”](#returns-27) `AsyncIterator`<`any`\[]> An `AsyncIterator` that iterates `eventName` events emitted by the `emitter` ##### Since [Section titled “Since”](#since-23) v13.6.0, v12.16.0 ##### Inherited from [Section titled “Inherited from”](#inherited-from-25) `EventEmitter.on` #### Call Signature [Section titled “Call Signature”](#call-signature-1) > `static` **on**(`emitter`, `eventName`, `options?`): `AsyncIterator`<`any`\[]> Defined in: node\_modules/@types/node/events.d.ts:308 ```js import { on, EventEmitter } from 'node:events'; import process from 'node:process'; const ee = new EventEmitter(); // Emit later on process.nextTick(() => { ee.emit('foo', 'bar'); ee.emit('foo', 42); }); for await (const event of on(ee, 'foo')) { // The execution of this inner block is synchronous and it // processes one event at a time (even with await). Do not use // if concurrent execution is required. console.log(event); // prints ['bar'] [42] } // Unreachable here ``` Returns an `AsyncIterator` that iterates `eventName` events. It will throw if the `EventEmitter` emits `'error'`. It removes all listeners when exiting the loop. The `value` returned by each iteration is an array composed of the emitted event arguments. An `AbortSignal` can be used to cancel waiting on events: ```js import { on, EventEmitter } from 'node:events'; import process from 'node:process'; const ac = new AbortController(); (async () => { const ee = new EventEmitter(); // Emit later on process.nextTick(() => { ee.emit('foo', 'bar'); ee.emit('foo', 42); }); for await (const event of on(ee, 'foo', { signal: ac.signal })) { // The execution of this inner block is synchronous and it // processes one event at a time (even with await). Do not use // if concurrent execution is required. console.log(event); // prints ['bar'] [42] } // Unreachable here })(); process.nextTick(() => ac.abort()); ``` Use the `close` option to specify an array of event names that will end the iteration: ```js import { on, EventEmitter } from 'node:events'; import process from 'node:process'; const ee = new EventEmitter(); // Emit later on process.nextTick(() => { ee.emit('foo', 'bar'); ee.emit('foo', 42); ee.emit('close'); }); for await (const event of on(ee, 'foo', { close: ['close'] })) { console.log(event); // prints ['bar'] [42] } // the loop will exit after 'close' is emitted console.log('done'); // prints 'done' ``` ##### Parameters [Section titled “Parameters”](#parameters-26) ###### emitter [Section titled “emitter”](#emitter-4) `EventTarget` ###### eventName [Section titled “eventName”](#eventname-14) `string` ###### options? [Section titled “options?”](#options-2) `StaticEventEmitterIteratorOptions` ##### Returns [Section titled “Returns”](#returns-28) `AsyncIterator`<`any`\[]> An `AsyncIterator` that iterates `eventName` events emitted by the `emitter` ##### Since [Section titled “Since”](#since-24) v13.6.0, v12.16.0 ##### Inherited from [Section titled “Inherited from”](#inherited-from-26) `EventEmitter.on` *** ### once() [Section titled “once()”](#once-1) #### Call Signature [Section titled “Call Signature”](#call-signature-2) > `static` **once**(`emitter`, `eventName`, `options?`): `Promise`<`any`\[]> Defined in: node\_modules/@types/node/events.d.ts:217 Creates a `Promise` that is fulfilled when the `EventEmitter` emits the given event or that is rejected if the `EventEmitter` emits `'error'` while waiting. The `Promise` will resolve with an array of all the arguments emitted to the given event. This method is intentionally generic and works with the web platform [EventTarget](https://dom.spec.whatwg.org/#interface-eventtarget) interface, which has no special`'error'` event semantics and does not listen to the `'error'` event. ```js import { once, EventEmitter } from 'node:events'; import process from 'node:process'; const ee = new EventEmitter(); process.nextTick(() => { ee.emit('myevent', 42); }); const [value] = await once(ee, 'myevent'); console.log(value); const err = new Error('kaboom'); process.nextTick(() => { ee.emit('error', err); }); try { await once(ee, 'myevent'); } catch (err) { console.error('error happened', err); } ``` The special handling of the `'error'` event is only used when `events.once()` is used to wait for another event. If `events.once()` is used to wait for the ‘`error'` event itself, then it is treated as any other kind of event without special handling: ```js import { EventEmitter, once } from 'node:events'; const ee = new EventEmitter(); once(ee, 'error') .then(([err]) => console.log('ok', err.message)) .catch((err) => console.error('error', err.message)); ee.emit('error', new Error('boom')); // Prints: ok boom ``` An `AbortSignal` can be used to cancel waiting for the event: ```js import { EventEmitter, once } from 'node:events'; const ee = new EventEmitter(); const ac = new AbortController(); async function foo(emitter, event, signal) { try { await once(emitter, event, { signal }); console.log('event emitted!'); } catch (error) { if (error.name === 'AbortError') { console.error('Waiting for the event was canceled!'); } else { console.error('There was an error', error.message); } } } foo(ee, 'foo', ac.signal); ac.abort(); // Abort waiting for the event ee.emit('foo'); // Prints: Waiting for the event was canceled! ``` ##### Parameters [Section titled “Parameters”](#parameters-27) ###### emitter [Section titled “emitter”](#emitter-5) `EventEmitter` ###### eventName [Section titled “eventName”](#eventname-15) `string` | `symbol` ###### options? [Section titled “options?”](#options-3) `StaticEventEmitterOptions` ##### Returns [Section titled “Returns”](#returns-29) `Promise`<`any`\[]> ##### Since [Section titled “Since”](#since-25) v11.13.0, v10.16.0 ##### Inherited from [Section titled “Inherited from”](#inherited-from-27) `EventEmitter.once` #### Call Signature [Section titled “Call Signature”](#call-signature-3) > `static` **once**(`emitter`, `eventName`, `options?`): `Promise`<`any`\[]> Defined in: node\_modules/@types/node/events.d.ts:222 Creates a `Promise` that is fulfilled when the `EventEmitter` emits the given event or that is rejected if the `EventEmitter` emits `'error'` while waiting. The `Promise` will resolve with an array of all the arguments emitted to the given event. This method is intentionally generic and works with the web platform [EventTarget](https://dom.spec.whatwg.org/#interface-eventtarget) interface, which has no special`'error'` event semantics and does not listen to the `'error'` event. ```js import { once, EventEmitter } from 'node:events'; import process from 'node:process'; const ee = new EventEmitter(); process.nextTick(() => { ee.emit('myevent', 42); }); const [value] = await once(ee, 'myevent'); console.log(value); const err = new Error('kaboom'); process.nextTick(() => { ee.emit('error', err); }); try { await once(ee, 'myevent'); } catch (err) { console.error('error happened', err); } ``` The special handling of the `'error'` event is only used when `events.once()` is used to wait for another event. If `events.once()` is used to wait for the ‘`error'` event itself, then it is treated as any other kind of event without special handling: ```js import { EventEmitter, once } from 'node:events'; const ee = new EventEmitter(); once(ee, 'error') .then(([err]) => console.log('ok', err.message)) .catch((err) => console.error('error', err.message)); ee.emit('error', new Error('boom')); // Prints: ok boom ``` An `AbortSignal` can be used to cancel waiting for the event: ```js import { EventEmitter, once } from 'node:events'; const ee = new EventEmitter(); const ac = new AbortController(); async function foo(emitter, event, signal) { try { await once(emitter, event, { signal }); console.log('event emitted!'); } catch (error) { if (error.name === 'AbortError') { console.error('Waiting for the event was canceled!'); } else { console.error('There was an error', error.message); } } } foo(ee, 'foo', ac.signal); ac.abort(); // Abort waiting for the event ee.emit('foo'); // Prints: Waiting for the event was canceled! ``` ##### Parameters [Section titled “Parameters”](#parameters-28) ###### emitter [Section titled “emitter”](#emitter-6) `EventTarget` ###### eventName [Section titled “eventName”](#eventname-16) `string` ###### options? [Section titled “options?”](#options-4) `StaticEventEmitterOptions` ##### Returns [Section titled “Returns”](#returns-30) `Promise`<`any`\[]> ##### Since [Section titled “Since”](#since-26) v11.13.0, v10.16.0 ##### Inherited from [Section titled “Inherited from”](#inherited-from-28) `EventEmitter.once` *** ### setMaxListeners() [Section titled “setMaxListeners()”](#setmaxlisteners-1) > `static` **setMaxListeners**(`n?`, …`eventTargets?`): `void` Defined in: node\_modules/@types/node/events.d.ts:402 ```js import { setMaxListeners, EventEmitter } from 'node:events'; const target = new EventTarget(); const emitter = new EventEmitter(); setMaxListeners(5, target, emitter); ``` #### Parameters [Section titled “Parameters”](#parameters-29) ##### n? [Section titled “n?”](#n-1) `number` A non-negative number. The maximum number of listeners per `EventTarget` event. ##### eventTargets? [Section titled “eventTargets?”](#eventtargets) …(`EventTarget` | `EventEmitter`<`DefaultEventMap`>)\[] Zero or more {EventTarget} or {EventEmitter} instances. If none are specified, `n` is set as the default max for all newly created {EventTarget} and {EventEmitter} objects. #### Returns [Section titled “Returns”](#returns-31) `void` #### Since [Section titled “Since”](#since-27) v15.4.0 #### Inherited from [Section titled “Inherited from”](#inherited-from-29) `EventEmitter.setMaxListeners`
# ScalarPlugin
Defined in: [src/plugins/application/scalar.ts:37](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/application/scalar.ts#L37) Scalar plugin. This plugin provides an API reference interface for your API. ## Param [Section titled “Param”](#param) Scalar plugin options ## Extends [Section titled “Extends”](#extends) * `ShokupanRouter`<`any`> ## Implements [Section titled “Implements”](#implements) * [`ShokupanPlugin`](/api/interfaces/shokupanplugin/) ## Constructors [Section titled “Constructors”](#constructors) ### Constructor [Section titled “Constructor”](#constructor) > **new ScalarPlugin**(`pluginOptions`): `ScalarPlugin` Defined in: [src/plugins/application/scalar.ts:38](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/application/scalar.ts#L38) #### Parameters [Section titled “Parameters”](#parameters) ##### pluginOptions [Section titled “pluginOptions”](#pluginoptions) [`ScalarPluginOptions`](/api/type-aliases/scalarpluginoptions/) = `{}` #### Returns [Section titled “Returns”](#returns) `ScalarPlugin` #### Overrides [Section titled “Overrides”](#overrides) `ShokupanRouter.constructor` ## Properties [Section titled “Properties”](#properties) ### \[$childControllers] [Section titled “\[$childControllers\]”](#childcontrollers) > **\[$childControllers]**: [`ShokupanController`](/api/type-aliases/shokupancontroller/)\[] = `[]` Defined in: [src/router.ts:89](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L89) #### Inherited from [Section titled “Inherited from”](#inherited-from) `ShokupanRouter.[$childControllers]` *** ### \[$childRouters] [Section titled “\[$childRouters\]”](#childrouters) > **\[$childRouters]**: `ShokupanRouter`<`any`>\[] = `[]` Defined in: [src/router.ts:88](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L88) #### Inherited from [Section titled “Inherited from”](#inherited-from-1) `ShokupanRouter.[$childRouters]` *** ### \[$mountPath] [Section titled “\[$mountPath\]”](#mountpath) > **\[$mountPath]**: `string` = `"/"` Defined in: [src/router.ts:85](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L85) #### Inherited from [Section titled “Inherited from”](#inherited-from-2) `ShokupanRouter.[$mountPath]` *** ### \[$routes] [Section titled “\[$routes\]”](#routes) > **\[$routes]**: [`ShokupanRoute`](/api/type-aliases/shokupanroute/)\[] = `[]` Defined in: [src/router.ts:103](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L103) #### Inherited from [Section titled “Inherited from”](#inherited-from-3) `ShokupanRouter.[$routes]` *** ### config? [Section titled “config?”](#config) > `readonly` `optional` **config**: `object` Defined in: [src/router.ts:183](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L183) #### autoBackpressureFeedback? [Section titled “autoBackpressureFeedback?”](#autobackpressurefeedback) > `optional` **autoBackpressureFeedback**: `boolean` Whether to enable automatic backpressure based on system CPU load. ##### Default [Section titled “Default”](#default) ```ts false ``` #### autoBackpressureLevel? [Section titled “autoBackpressureLevel?”](#autobackpressurelevel) > `optional` **autoBackpressureLevel**: `number` The CPU usage percentage threshold (0-100) at which to start rejecting requests. #### controllersOnly? [Section titled “controllersOnly?”](#controllersonly) > `optional` **controllersOnly**: `boolean` Whether to enforce that only controller classes (constructors) are accepted by the router. ##### Default [Section titled “Default”](#default-1) ```ts false ``` #### group? [Section titled “group?”](#group) > `optional` **group**: `string` #### hooks? [Section titled “hooks?”](#hooks) > `optional` **hooks**: { `afterValidate?`: (`ctx`, `data`) => `void` | `Promise`<`void`>; `beforeValidate?`: (`ctx`, `data`) => `void` | `Promise`<`void`>; `onError?`: (`ctx`, `error`) => `void` | `Promise`<`void`>; `onReadTimeout?`: (`ctx`) => `void` | `Promise`<`void`>; `onRequestEnd?`: (`ctx`) => `void` | `Promise`<`void`>; `onRequestStart?`: (`ctx`) => `void` | `Promise`<`void`>; `onRequestTimeout?`: (`ctx`) => `void` | `Promise`<`void`>; `onResponseEnd?`: (`ctx`, `response`) => `void` | `Promise`<`void`>; `onResponseStart?`: (`ctx`, `response`) => `void` | `Promise`<`void`>; `onWriteTimeout?`: (`ctx`) => `void` | `Promise`<`void`>; } | `object`\[] Hooks for this route/router. #### name? [Section titled “name?”](#name) > `optional` **name**: `string` #### openapi? [Section titled “openapi?”](#openapi) > `optional` **openapi**: {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `consumes?`: `string`\[]; `deprecated?`: `boolean`; `description?`: `string`; `externalDocs?`: {\[`key`: `string`]: `any`; `description?`: `string`; `url?`: `string`; }; `operationId?`: `string`; `parameters?`: ({\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; } | {\[`key`: `string`]: `any`; `description?`: `string`; `in?`: `ParameterLocation`; `name?`: `string`; `required?`: `boolean`; `schema?`: {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; } | {\[`key`: `string`]: `any`; \[`key`: `` `x-${string}` ``]: `any`; `$ref?`: `string`; `$schema?`: `string`; `additionalItems?`: `boolean` | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; `$schema?`: `string`; `additionalItems?`: boolean | { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; … 23 more …; $ref?: string; }; `additionalProperties?`: boolean | { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; … 23 more …; $ref?: string; }; `allOf?`: …\[]; `anyOf?`: …\[]; `definitions?`: {\[`key`: …]: …; }; `dependencies?`: {\[`key`: …]: …; }; `description?`: `string`; `enum?`: …\[]; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `id?`: `string`; `items?`: … | …; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `required?`: …\[]; `title?`: `string`; `type?`: … | …; `uniqueItems?`: `boolean`; }; `additionalProperties?`: `boolean` | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; `$schema?`: `string`; `additionalItems?`: boolean | { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; … 23 more …; $ref?: string; }; `additionalProperties?`: boolean | { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; … 23 more …; $ref?: string; }; `allOf?`: …\[]; `anyOf?`: …\[]; `definitions?`: {\[`key`: …]: …; }; `dependencies?`: {\[`key`: …]: …; }; `description?`: `string`; `enum?`: …\[]; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `id?`: `string`; `items?`: … | …; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `required?`: …\[]; `title?`: `string`; `type?`: … | …; `uniqueItems?`: `boolean`; }; `allOf?`: `object`\[]; `anyOf?`: `object`\[]; `default?`: `any`; `definitions?`: {\[`key`: `string`]: `object`; }; `dependencies?`: {\[`key`: `string`]: …\[] | {\[`key`: …]: …; \[`key`: …]: …; `$ref?`: …; `$schema?`: …; `additionalItems?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `definitions?`: …; `dependencies?`: …; `description?`: …; `enum?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `id?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; }; }; `description?`: `string`; `discriminator?`: `string`; `enum?`: `any`\[]; `example?`: `any`; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `externalDocs?`: {\[`key`: `string`]: `any`; `description?`: `string`; `url?`: `string`; }; `id?`: `string`; `items?`: {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; `$schema?`: `string`; `additionalItems?`: … | … | …; `additionalProperties?`: … | … | …; `allOf?`: …\[]; `anyOf?`: …\[]; `definitions?`: {\[`key`: …]: …; }; `dependencies?`: {\[`key`: …]: …; }; `description?`: `string`; `enum?`: …\[]; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `id?`: `string`; `items?`: … | …; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: {\[`key`: …]: …; \[`key`: …]: …; `$ref?`: …; `$schema?`: …; `additionalItems?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `definitions?`: …; `dependencies?`: …; `description?`: …; `enum?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `id?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; }; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `required?`: …\[]; `title?`: `string`; `type?`: … | …; `uniqueItems?`: `boolean`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; \[`key`: `number`]: `object`; `[unscopables]?`: {\[`key`: …]: …; `[iterator]?`: …; `[unscopables]?`: …; `at?`: …; `concat?`: …; `copyWithin?`: …; `entries?`: …; `every?`: …; `fill?`: …; `filter?`: …; `find?`: …; `findIndex?`: …; `findLast?`: …; `findLastIndex?`: …; `flat?`: …; `flatMap?`: …; `forEach?`: …; `includes?`: …; `indexOf?`: …; `join?`: …; `keys?`: …; `lastIndexOf?`: …; `length?`: …; `map?`: …; `pop?`: …; `push?`: …; `reduce?`: …; `reduceRight?`: …; `reverse?`: …; `shift?`: …; `slice?`: …; `some?`: …; `sort?`: …; `splice?`: …; `toLocaleString?`: …; `toReversed?`: …; `toSorted?`: …; `toSpliced?`: …; `toString?`: …; `unshift?`: …; `values?`: …; `with?`: …; }; `$ref?`: `string`; `length?`: `number`; `[iterator]?`: `ArrayIterator`<…>; `at?`: `IJsonSchema`; `concat?`: …\[]; `copyWithin?`: `this`; `entries?`: `ArrayIterator`<…>; `every?`: `this is (...)[]`; `fill?`: `this`; `filter?`: …\[]; `find?`: `S`; `findIndex?`: `number`; `findLast?`: `S`; `findLastIndex?`: `number`; `flat?`: …\[]; `flatMap?`: …\[]; `forEach?`: `void`; `includes?`: `boolean`; `indexOf?`: `number`; `join?`: `string`; `keys?`: `ArrayIterator`<…>; `lastIndexOf?`: `number`; `map?`: …\[]; `pop?`: `IJsonSchema`; `push?`: `number`; `reduce?`: `IJsonSchema`; `reduceRight?`: `IJsonSchema`; `reverse?`: …\[]; `shift?`: `IJsonSchema`; `slice?`: …\[]; `some?`: `boolean`; `sort?`: `this`; `splice?`: …\[]; `toLocaleString?`: `string`; `toReversed?`: …\[]; `toSorted?`: …\[]; `toSpliced?`: …\[]; `toString?`: `string`; `unshift?`: `number`; `values?`: `ArrayIterator`<…>; `with?`: …\[]; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; `$schema?`: `string`; `additionalItems?`: … | … | …; `additionalProperties?`: … | … | …; `allOf?`: …\[]; `anyOf?`: …\[]; `collectionFormat?`: `string`; `default?`: `any`; `definitions?`: {\[`key`: …]: …; }; `dependencies?`: {\[`key`: …]: …; }; `description?`: `string`; `enum?`: …\[]; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `format?`: `string`; `id?`: `string`; `items?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; … 22 more …; not?: { …; }; } | { …; } | { …; } | { …; }; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: {\[`key`: …]: …; \[`key`: …]: …; `$ref?`: …; `$schema?`: …; `additionalItems?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `definitions?`: …; `dependencies?`: …; `description?`: …; `enum?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `id?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; }; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `required?`: …\[]; `title?`: `string`; `type?`: … | …; `uniqueItems?`: `boolean`; } | {\[`key`: `number`]: `object`; `[unscopables]?`: {\[`key`: …]: …; `[iterator]?`: …; `[unscopables]?`: …; `at?`: …; `concat?`: …; `copyWithin?`: …; `entries?`: …; `every?`: …; `fill?`: …; `filter?`: …; `find?`: …; `findIndex?`: …; `findLast?`: …; `findLastIndex?`: …; `flat?`: …; `flatMap?`: …; `forEach?`: …; `includes?`: …; `indexOf?`: …; `join?`: …; `keys?`: …; `lastIndexOf?`: …; `length?`: …; `map?`: …; `pop?`: …; `push?`: …; `reduce?`: …; `reduceRight?`: …; `reverse?`: …; `shift?`: …; `slice?`: …; `some?`: …; `sort?`: …; `splice?`: …; `toLocaleString?`: …; `toReversed?`: …; `toSorted?`: …; `toSpliced?`: …; `toString?`: …; `unshift?`: …; `values?`: …; `with?`: …; }; `$ref?`: `string`; `collectionFormat?`: `string`; `default?`: `any`; `enum?`: …\[]; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `format?`: `string`; `items?`: … | …; `length?`: `number`; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `multipleOf?`: `number`; `pattern?`: `string`; `type?`: `string`; `uniqueItems?`: `boolean`; `[iterator]?`: `ArrayIterator`<…>; `at?`: `IJsonSchema`; `concat?`: …\[]; `copyWithin?`: `this`; `entries?`: `ArrayIterator`<…>; `every?`: `this is (...)[]`; `fill?`: `this`; `filter?`: …\[]; `find?`: `S`; `findIndex?`: `number`; `findLast?`: `S`; `findLastIndex?`: `number`; `flat?`: …\[]; `flatMap?`: …\[]; `forEach?`: `void`; `includes?`: `boolean`; `indexOf?`: `number`; `join?`: `string`; `keys?`: `ArrayIterator`<…>; `lastIndexOf?`: `number`; `map?`: …\[]; `pop?`: `IJsonSchema`; `push?`: `number`; `reduce?`: `IJsonSchema`; `reduceRight?`: `IJsonSchema`; `reverse?`: …\[]; `shift?`: `IJsonSchema`; `slice?`: …\[]; `some?`: `boolean`; `sort?`: `this`; `splice?`: …\[]; `toLocaleString?`: `string`; `toReversed?`: …\[]; `toSorted?`: …\[]; `toSpliced?`: …\[]; `toString?`: `string`; `unshift?`: `number`; `values?`: `ArrayIterator`<…>; `with?`: …\[]; }; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; `$schema?`: `string`; `additionalItems?`: `boolean` | { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }; `additionalProperties?`: `boolean` | { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }; `allOf?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }\[]; `anyOf?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }\[]; `definitions?`: {\[`key`: `string`]: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }; }; `dependencies?`: {\[`key`: `string`]: … | …; }; `description?`: `string`; `enum?`: `any`\[]; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `id?`: `string`; `items?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; } | …\[]; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }; `oneOf?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: `string`]: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }; }; `properties?`: {\[`key`: `string`]: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }; }; `required?`: `string`\[]; `title?`: `string`; `type?`: `string` | …\[]; `uniqueItems?`: `boolean`; }; `oneOf?`: `object`\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: `string`]: `object`; }; `properties?`: {\[`key`: `string`]: `object`; }; `readOnly?`: `boolean`; `required?`: `string`\[]; `title?`: `string`; `type?`: `string` | `string`\[]; `uniqueItems?`: `boolean`; `xml?`: {\[`key`: `string`]: `any`; `attribute?`: `boolean`; `name?`: `string`; `namespace?`: `string`; `prefix?`: `string`; `wrapped?`: `boolean`; }; }; } | {\[`key`: `string`]: `any`; `$ref?`: `string`; `allowEmptyValue?`: `boolean`; `collectionFormat?`: `string`; `default?`: `any`; `description?`: `string`; `enum?`: `any`\[]; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `format?`: `string`; `in?`: `ParameterLocation`; `items?`: {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; } | { `$ref?`: `string`; `collectionFormat?`: `string`; `default?`: `any`; `enum?`: `any`\[]; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `format?`: `string`; `items?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { type?: string; format?: string; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | …; collectionFormat?: string; default?: any; … 12 more …; $ref?: string; }; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `multipleOf?`: `number`; `pattern?`: `string`; `type?`: `string`; `uniqueItems?`: `boolean`; }; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `multipleOf?`: `number`; `name?`: `string`; `pattern?`: `string`; `required?`: `boolean`; `type?`: `string`; `uniqueItems?`: `boolean`; })\[]; `produces?`: `string`\[]; `responses?`: {\[`key`: `string`]: {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; } | {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `description?`: `string`; `examples?`: {\[`key`: `string`]: `any`; }; `headers?`: {\[`key`: `string`]: `object`; }; `schema?`: {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; } | {\[`key`: `string`]: `any`; \[`key`: `` `x-${string}` ``]: `any`; `$ref?`: `string`; `$schema?`: `string`; `additionalItems?`: `boolean` | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; `$schema?`: `string`; `additionalItems?`: boolean | { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; … 23 more …; $ref?: string; }; `additionalProperties?`: boolean | { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; … 23 more …; $ref?: string; }; `allOf?`: …\[]; `anyOf?`: …\[]; `definitions?`: {\[`key`: …]: …; }; `dependencies?`: {\[`key`: …]: …; }; `description?`: `string`; `enum?`: …\[]; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `id?`: `string`; `items?`: … | …; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `required?`: …\[]; `title?`: `string`; `type?`: … | …; `uniqueItems?`: `boolean`; }; `additionalProperties?`: `boolean` | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; `$schema?`: `string`; `additionalItems?`: boolean | { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; … 23 more …; $ref?: string; }; `additionalProperties?`: boolean | { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; … 23 more …; $ref?: string; }; `allOf?`: …\[]; `anyOf?`: …\[]; `definitions?`: {\[`key`: …]: …; }; `dependencies?`: {\[`key`: …]: …; }; `description?`: `string`; `enum?`: …\[]; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `id?`: `string`; `items?`: … | …; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `required?`: …\[]; `title?`: `string`; `type?`: … | …; `uniqueItems?`: `boolean`; }; `allOf?`: `object`\[]; `anyOf?`: `object`\[]; `default?`: `any`; `definitions?`: {\[`key`: `string`]: `object`; }; `dependencies?`: {\[`key`: `string`]: …\[] | {\[`key`: …]: …; \[`key`: …]: …; `$ref?`: …; `$schema?`: …; `additionalItems?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `definitions?`: …; `dependencies?`: …; `description?`: …; `enum?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `id?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; }; }; `description?`: `string`; `discriminator?`: `string`; `enum?`: `any`\[]; `example?`: `any`; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `externalDocs?`: {\[`key`: `string`]: `any`; `description?`: `string`; `url?`: `string`; }; `id?`: `string`; `items?`: {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; `$schema?`: `string`; `additionalItems?`: … | … | …; `additionalProperties?`: … | … | …; `allOf?`: …\[]; `anyOf?`: …\[]; `definitions?`: {\[`key`: …]: …; }; `dependencies?`: {\[`key`: …]: …; }; `description?`: `string`; `enum?`: …\[]; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `id?`: `string`; `items?`: … | …; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: {\[`key`: …]: …; \[`key`: …]: …; `$ref?`: …; `$schema?`: …; `additionalItems?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `definitions?`: …; `dependencies?`: …; `description?`: …; `enum?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `id?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; }; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `required?`: …\[]; `title?`: `string`; `type?`: … | …; `uniqueItems?`: `boolean`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; \[`key`: `number`]: `object`; `[unscopables]?`: {\[`key`: …]: …; `[iterator]?`: …; `[unscopables]?`: …; `at?`: …; `concat?`: …; `copyWithin?`: …; `entries?`: …; `every?`: …; `fill?`: …; `filter?`: …; `find?`: …; `findIndex?`: …; `findLast?`: …; `findLastIndex?`: …; `flat?`: …; `flatMap?`: …; `forEach?`: …; `includes?`: …; `indexOf?`: …; `join?`: …; `keys?`: …; `lastIndexOf?`: …; `length?`: …; `map?`: …; `pop?`: …; `push?`: …; `reduce?`: …; `reduceRight?`: …; `reverse?`: …; `shift?`: …; `slice?`: …; `some?`: …; `sort?`: …; `splice?`: …; `toLocaleString?`: …; `toReversed?`: …; `toSorted?`: …; `toSpliced?`: …; `toString?`: …; `unshift?`: …; `values?`: …; `with?`: …; }; `$ref?`: `string`; `length?`: `number`; `[iterator]?`: `ArrayIterator`<…>; `at?`: `IJsonSchema`; `concat?`: …\[]; `copyWithin?`: `this`; `entries?`: `ArrayIterator`<…>; `every?`: `this is (...)[]`; `fill?`: `this`; `filter?`: …\[]; `find?`: `S`; `findIndex?`: `number`; `findLast?`: `S`; `findLastIndex?`: `number`; `flat?`: …\[]; `flatMap?`: …\[]; `forEach?`: `void`; `includes?`: `boolean`; `indexOf?`: `number`; `join?`: `string`; `keys?`: `ArrayIterator`<…>; `lastIndexOf?`: `number`; `map?`: …\[]; `pop?`: `IJsonSchema`; `push?`: `number`; `reduce?`: `IJsonSchema`; `reduceRight?`: `IJsonSchema`; `reverse?`: …\[]; `shift?`: `IJsonSchema`; `slice?`: …\[]; `some?`: `boolean`; `sort?`: `this`; `splice?`: …\[]; `toLocaleString?`: `string`; `toReversed?`: …\[]; `toSorted?`: …\[]; `toSpliced?`: …\[]; `toString?`: `string`; `unshift?`: `number`; `values?`: `ArrayIterator`<…>; `with?`: …\[]; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; `$schema?`: `string`; `additionalItems?`: … | … | …; `additionalProperties?`: … | … | …; `allOf?`: …\[]; `anyOf?`: …\[]; `collectionFormat?`: `string`; `default?`: `any`; `definitions?`: {\[`key`: …]: …; }; `dependencies?`: {\[`key`: …]: …; }; `description?`: `string`; `enum?`: …\[]; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `format?`: `string`; `id?`: `string`; `items?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; … 22 more …; not?: { …; }; } | { …; } | { …; } | { …; }; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: {\[`key`: …]: …; \[`key`: …]: …; `$ref?`: …; `$schema?`: …; `additionalItems?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `definitions?`: …; `dependencies?`: …; `description?`: …; `enum?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `id?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; }; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `required?`: …\[]; `title?`: `string`; `type?`: … | …; `uniqueItems?`: `boolean`; } | {\[`key`: `number`]: `object`; `[unscopables]?`: {\[`key`: …]: …; `[iterator]?`: …; `[unscopables]?`: …; `at?`: …; `concat?`: …; `copyWithin?`: …; `entries?`: …; `every?`: …; `fill?`: …; `filter?`: …; `find?`: …; `findIndex?`: …; `findLast?`: …; `findLastIndex?`: …; `flat?`: …; `flatMap?`: …; `forEach?`: …; `includes?`: …; `indexOf?`: …; `join?`: …; `keys?`: …; `lastIndexOf?`: …; `length?`: …; `map?`: …; `pop?`: …; `push?`: …; `reduce?`: …; `reduceRight?`: …; `reverse?`: …; `shift?`: …; `slice?`: …; `some?`: …; `sort?`: …; `splice?`: …; `toLocaleString?`: …; `toReversed?`: …; `toSorted?`: …; `toSpliced?`: …; `toString?`: …; `unshift?`: …; `values?`: …; `with?`: …; }; `$ref?`: `string`; `collectionFormat?`: `string`; `default?`: `any`; `enum?`: …\[]; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `format?`: `string`; `items?`: … | …; `length?`: `number`; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `multipleOf?`: `number`; `pattern?`: `string`; `type?`: `string`; `uniqueItems?`: `boolean`; `[iterator]?`: `ArrayIterator`<…>; `at?`: `IJsonSchema`; `concat?`: …\[]; `copyWithin?`: `this`; `entries?`: `ArrayIterator`<…>; `every?`: `this is (...)[]`; `fill?`: `this`; `filter?`: …\[]; `find?`: `S`; `findIndex?`: `number`; `findLast?`: `S`; `findLastIndex?`: `number`; `flat?`: …\[]; `flatMap?`: …\[]; `forEach?`: `void`; `includes?`: `boolean`; `indexOf?`: `number`; `join?`: `string`; `keys?`: `ArrayIterator`<…>; `lastIndexOf?`: `number`; `map?`: …\[]; `pop?`: `IJsonSchema`; `push?`: `number`; `reduce?`: `IJsonSchema`; `reduceRight?`: `IJsonSchema`; `reverse?`: …\[]; `shift?`: `IJsonSchema`; `slice?`: …\[]; `some?`: `boolean`; `sort?`: `this`; `splice?`: …\[]; `toLocaleString?`: `string`; `toReversed?`: …\[]; `toSorted?`: …\[]; `toSpliced?`: …\[]; `toString?`: `string`; `unshift?`: `number`; `values?`: `ArrayIterator`<…>; `with?`: …\[]; }; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; `$schema?`: `string`; `additionalItems?`: `boolean` | { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }; `additionalProperties?`: `boolean` | { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }; `allOf?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }\[]; `anyOf?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }\[]; `definitions?`: {\[`key`: `string`]: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }; }; `dependencies?`: {\[`key`: `string`]: … | …; }; `description?`: `string`; `enum?`: `any`\[]; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `id?`: `string`; `items?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; } | …\[]; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }; `oneOf?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: `string`]: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }; }; `properties?`: {\[`key`: `string`]: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }; }; `required?`: `string`\[]; `title?`: `string`; `type?`: `string` | …\[]; `uniqueItems?`: `boolean`; }; `oneOf?`: `object`\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: `string`]: `object`; }; `properties?`: {\[`key`: `string`]: `object`; }; `readOnly?`: `boolean`; `required?`: `string`\[]; `title?`: `string`; `type?`: `string` | `string`\[]; `uniqueItems?`: `boolean`; `xml?`: {\[`key`: `string`]: `any`; `attribute?`: `boolean`; `name?`: `string`; `namespace?`: `string`; `prefix?`: `string`; `wrapped?`: `boolean`; }; }; }; `default?`: {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; } | {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `description?`: `string`; `examples?`: {\[`key`: `string`]: `any`; }; `headers?`: {\[`key`: `string`]: `object`; }; `schema?`: {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; } | {\[`key`: `string`]: `any`; \[`key`: `` `x-${string}` ``]: `any`; `$ref?`: `string`; `$schema?`: `string`; `additionalItems?`: `boolean` | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; `$schema?`: `string`; `additionalItems?`: boolean | { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; … 23 more …; $ref?: string; }; `additionalProperties?`: boolean | { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; … 23 more …; $ref?: string; }; `allOf?`: …\[]; `anyOf?`: …\[]; `definitions?`: {\[`key`: …]: …; }; `dependencies?`: {\[`key`: …]: …; }; `description?`: `string`; `enum?`: …\[]; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `id?`: `string`; `items?`: … | …; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `required?`: …\[]; `title?`: `string`; `type?`: … | …; `uniqueItems?`: `boolean`; }; `additionalProperties?`: `boolean` | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; `$schema?`: `string`; `additionalItems?`: boolean | { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; … 23 more …; $ref?: string; }; `additionalProperties?`: boolean | { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; … 23 more …; $ref?: string; }; `allOf?`: …\[]; `anyOf?`: …\[]; `definitions?`: {\[`key`: …]: …; }; `dependencies?`: {\[`key`: …]: …; }; `description?`: `string`; `enum?`: …\[]; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `id?`: `string`; `items?`: … | …; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `required?`: …\[]; `title?`: `string`; `type?`: … | …; `uniqueItems?`: `boolean`; }; `allOf?`: `object`\[]; `anyOf?`: `object`\[]; `default?`: `any`; `definitions?`: {\[`key`: `string`]: `object`; }; `dependencies?`: {\[`key`: `string`]: …\[] | {\[`key`: …]: …; \[`key`: …]: …; `$ref?`: …; `$schema?`: …; `additionalItems?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `definitions?`: …; `dependencies?`: …; `description?`: …; `enum?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `id?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; }; }; `description?`: `string`; `discriminator?`: `string`; `enum?`: `any`\[]; `example?`: `any`; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `externalDocs?`: {\[`key`: `string`]: `any`; `description?`: `string`; `url?`: `string`; }; `id?`: `string`; `items?`: {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; `$schema?`: `string`; `additionalItems?`: … | … | …; `additionalProperties?`: … | … | …; `allOf?`: …\[]; `anyOf?`: …\[]; `definitions?`: {\[`key`: …]: …; }; `dependencies?`: {\[`key`: …]: …; }; `description?`: `string`; `enum?`: …\[]; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `id?`: `string`; `items?`: … | …; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: {\[`key`: …]: …; \[`key`: …]: …; `$ref?`: …; `$schema?`: …; `additionalItems?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `definitions?`: …; `dependencies?`: …; `description?`: …; `enum?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `id?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; }; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `required?`: …\[]; `title?`: `string`; `type?`: … | …; `uniqueItems?`: `boolean`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; \[`key`: `number`]: `object`; `[unscopables]?`: {\[`key`: …]: …; `[iterator]?`: …; `[unscopables]?`: …; `at?`: …; `concat?`: …; `copyWithin?`: …; `entries?`: …; `every?`: …; `fill?`: …; `filter?`: …; `find?`: …; `findIndex?`: …; `findLast?`: …; `findLastIndex?`: …; `flat?`: …; `flatMap?`: …; `forEach?`: …; `includes?`: …; `indexOf?`: …; `join?`: …; `keys?`: …; `lastIndexOf?`: …; `length?`: …; `map?`: …; `pop?`: …; `push?`: …; `reduce?`: …; `reduceRight?`: …; `reverse?`: …; `shift?`: …; `slice?`: …; `some?`: …; `sort?`: …; `splice?`: …; `toLocaleString?`: …; `toReversed?`: …; `toSorted?`: …; `toSpliced?`: …; `toString?`: …; `unshift?`: …; `values?`: …; `with?`: …; }; `$ref?`: `string`; `length?`: `number`; `[iterator]?`: `ArrayIterator`<…>; `at?`: `IJsonSchema`; `concat?`: …\[]; `copyWithin?`: `this`; `entries?`: `ArrayIterator`<…>; `every?`: `this is (...)[]`; `fill?`: `this`; `filter?`: …\[]; `find?`: `S`; `findIndex?`: `number`; `findLast?`: `S`; `findLastIndex?`: `number`; `flat?`: …\[]; `flatMap?`: …\[]; `forEach?`: `void`; `includes?`: `boolean`; `indexOf?`: `number`; `join?`: `string`; `keys?`: `ArrayIterator`<…>; `lastIndexOf?`: `number`; `map?`: …\[]; `pop?`: `IJsonSchema`; `push?`: `number`; `reduce?`: `IJsonSchema`; `reduceRight?`: `IJsonSchema`; `reverse?`: …\[]; `shift?`: `IJsonSchema`; `slice?`: …\[]; `some?`: `boolean`; `sort?`: `this`; `splice?`: …\[]; `toLocaleString?`: `string`; `toReversed?`: …\[]; `toSorted?`: …\[]; `toSpliced?`: …\[]; `toString?`: `string`; `unshift?`: `number`; `values?`: `ArrayIterator`<…>; `with?`: …\[]; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; `$schema?`: `string`; `additionalItems?`: … | … | …; `additionalProperties?`: … | … | …; `allOf?`: …\[]; `anyOf?`: …\[]; `collectionFormat?`: `string`; `default?`: `any`; `definitions?`: {\[`key`: …]: …; }; `dependencies?`: {\[`key`: …]: …; }; `description?`: `string`; `enum?`: …\[]; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `format?`: `string`; `id?`: `string`; `items?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; … 22 more …; not?: { …; }; } | { …; } | { …; } | { …; }; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: {\[`key`: …]: …; \[`key`: …]: …; `$ref?`: …; `$schema?`: …; `additionalItems?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `definitions?`: …; `dependencies?`: …; `description?`: …; `enum?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `id?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; }; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `required?`: …\[]; `title?`: `string`; `type?`: … | …; `uniqueItems?`: `boolean`; } | {\[`key`: `number`]: `object`; `[unscopables]?`: {\[`key`: …]: …; `[iterator]?`: …; `[unscopables]?`: …; `at?`: …; `concat?`: …; `copyWithin?`: …; `entries?`: …; `every?`: …; `fill?`: …; `filter?`: …; `find?`: …; `findIndex?`: …; `findLast?`: …; `findLastIndex?`: …; `flat?`: …; `flatMap?`: …; `forEach?`: …; `includes?`: …; `indexOf?`: …; `join?`: …; `keys?`: …; `lastIndexOf?`: …; `length?`: …; `map?`: …; `pop?`: …; `push?`: …; `reduce?`: …; `reduceRight?`: …; `reverse?`: …; `shift?`: …; `slice?`: …; `some?`: …; `sort?`: …; `splice?`: …; `toLocaleString?`: …; `toReversed?`: …; `toSorted?`: …; `toSpliced?`: …; `toString?`: …; `unshift?`: …; `values?`: …; `with?`: …; }; `$ref?`: `string`; `collectionFormat?`: `string`; `default?`: `any`; `enum?`: …\[]; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `format?`: `string`; `items?`: … | …; `length?`: `number`; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `multipleOf?`: `number`; `pattern?`: `string`; `type?`: `string`; `uniqueItems?`: `boolean`; `[iterator]?`: `ArrayIterator`<…>; `at?`: `IJsonSchema`; `concat?`: …\[]; `copyWithin?`: `this`; `entries?`: `ArrayIterator`<…>; `every?`: `this is (...)[]`; `fill?`: `this`; `filter?`: …\[]; `find?`: `S`; `findIndex?`: `number`; `findLast?`: `S`; `findLastIndex?`: `number`; `flat?`: …\[]; `flatMap?`: …\[]; `forEach?`: `void`; `includes?`: `boolean`; `indexOf?`: `number`; `join?`: `string`; `keys?`: `ArrayIterator`<…>; `lastIndexOf?`: `number`; `map?`: …\[]; `pop?`: `IJsonSchema`; `push?`: `number`; `reduce?`: `IJsonSchema`; `reduceRight?`: `IJsonSchema`; `reverse?`: …\[]; `shift?`: `IJsonSchema`; `slice?`: …\[]; `some?`: `boolean`; `sort?`: `this`; `splice?`: …\[]; `toLocaleString?`: `string`; `toReversed?`: …\[]; `toSorted?`: …\[]; `toSpliced?`: …\[]; `toString?`: `string`; `unshift?`: `number`; `values?`: `ArrayIterator`<…>; `with?`: …\[]; }; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; `$schema?`: `string`; `additionalItems?`: `boolean` | { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }; `additionalProperties?`: `boolean` | { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }; `allOf?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }\[]; `anyOf?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }\[]; `definitions?`: {\[`key`: `string`]: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }; }; `dependencies?`: {\[`key`: `string`]: … | …; }; `description?`: `string`; `enum?`: `any`\[]; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `id?`: `string`; `items?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; } | …\[]; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }; `oneOf?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: `string`]: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }; }; `properties?`: {\[`key`: `string`]: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }; }; `required?`: `string`\[]; `title?`: `string`; `type?`: `string` | …\[]; `uniqueItems?`: `boolean`; }; `oneOf?`: `object`\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: `string`]: `object`; }; `properties?`: {\[`key`: `string`]: `object`; }; `readOnly?`: `boolean`; `required?`: `string`\[]; `title?`: `string`; `type?`: `string` | `string`\[]; `uniqueItems?`: `boolean`; `xml?`: {\[`key`: `string`]: `any`; `attribute?`: `boolean`; `name?`: `string`; `namespace?`: `string`; `prefix?`: `string`; `wrapped?`: `boolean`; }; }; }; }; `schemes?`: `string`\[]; `security?`: `object`\[]; `summary?`: `string`; `tags?`: `string`\[]; } | {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `callbacks?`: {\[`key`: `string`]: {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; } | {\[`key`: `string`]: `object`; }; }; `deprecated?`: `boolean`; `description?`: `string`; `externalDocs?`: { `description?`: `string`; `url?`: `string`; }; `operationId?`: `string`; `parameters?`: ({\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; } | { `allowEmptyValue?`: `boolean`; `allowReserved?`: `boolean`; `content?`: {\[`key`: `string`]: `object`; }; `deprecated?`: `boolean`; `description?`: `string`; `example?`: `any`; `examples?`: {\[`key`: `string`]: {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; } | { `description?`: `string`; `externalValue?`: `string`; `summary?`: `string`; `value?`: `any`; }; }; `explode?`: `boolean`; `in?`: `ParameterLocation`; `name?`: `string`; `required?`: `boolean`; `schema?`: {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; } | {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `additionalProperties?`: `boolean` | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: NonArraySchemaObjectType; … 33 more …; deprecated?: boolean; }; … 33 more …; deprecated?: boolean; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `additionalProperties?`: boolean | { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; …; `allOf?`: …\[]; `anyOf?`: …\[]; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…; `nullable?`: `boolean`; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: `NonArraySchemaObjectType`; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `attribute?`: …; `name?`: …; `namespace?`: …; `prefix?`: …; `wrapped?`: …; }; }; `allOf?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…\[]; `anyOf?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…\[]; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `mapping?`: {\[`key`: `string`]: `string`; }; `propertyName?`: `string`; }; `enum?`: `any`\[]; `example?`: `any`; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `externalDocs?`: { `description?`: `string`; `url?`: `string`; }; `format?`: `string`; `items?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…; `nullable?`: `boolean`; `oneOf?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: `string`]: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…; }; `properties?`: {\[`key`: `string`]: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…; }; `readOnly?`: `boolean`; `required?`: `string`\[]; `title?`: `string`; `type?`: `"array"`; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `attribute?`: `boolean`; `name?`: `string`; `namespace?`: `string`; `prefix?`: `string`; `wrapped?`: `boolean`; }; } | {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `additionalProperties?`: `boolean` | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `additionalProperties?`: boolean | { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; …; `allOf?`: …\[]; `anyOf?`: …\[]; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `items?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…; `nullable?`: `boolean`; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: `"array"`; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `attribute?`: …; `name?`: …; `namespace?`: …; `prefix?`: …; `wrapped?`: …; }; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: NonArraySchemaObjectType; title?: string; description?: string; format?: string; default?: any; multipleOf?: number; maximum?: number; … 27 more …; deprecated?: boolean; }; `allOf?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…\[]; `anyOf?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…\[]; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `mapping?`: {\[`key`: `string`]: `string`; }; `propertyName?`: `string`; }; `enum?`: `any`\[]; `example?`: `any`; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `externalDocs?`: { `description?`: `string`; `url?`: `string`; }; `format?`: `string`; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…; `nullable?`: `boolean`; `oneOf?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: `string`]: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…; }; `properties?`: {\[`key`: `string`]: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…; }; `readOnly?`: `boolean`; `required?`: `string`\[]; `title?`: `string`; `type?`: `NonArraySchemaObjectType`; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `attribute?`: `boolean`; `name?`: `string`; `namespace?`: `string`; `prefix?`: `string`; `wrapped?`: `boolean`; }; }; `style?`: `ParameterStyle`; })\[]; `requestBody?`: {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; } | { `content?`: {\[`key`: `string`]: `object`; }; `description?`: `string`; `required?`: `boolean`; }; `responses?`: {\[`key`: `string`]: {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; } | {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `content?`: {\[`key`: `string`]: `object`; }; `description?`: `string`; `headers?`: {\[`key`: `string`]: {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; } | { `allowEmptyValue?`: `boolean`; `allowReserved?`: `boolean`; `content?`: {\[`key`: `string`]: `object`; }; `deprecated?`: `boolean`; `description?`: `string`; `example?`: `any`; `examples?`: {\[`key`: `string`]: … | …; }; `explode?`: `boolean`; `required?`: `boolean`; `schema?`: {\[`key`: …]: …; \[`key`: …]: …; `$ref?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `nullable?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `nullable?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; }; `style?`: `ParameterStyle`; }; }; `links?`: {\[`key`: `string`]: {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; } | { `description?`: `string`; `operationId?`: `string`; `operationRef?`: `string`; `parameters?`: {\[`key`: `string`]: `any`; }; `requestBody?`: `any`; `server?`: { `description?`: `string`; `url?`: `string`; `variables?`: {\[`key`: …]: …; }; }; }; }; }; }; `security?`: `object`\[]; `servers?`: `object`\[]; `summary?`: `string`; `tags?`: `string`\[]; } | {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `callbacks?`: {\[`key`: `string`]: {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `description?`: `string`; `summary?`: `string`; } | {\[`key`: `string`]: {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `description?`: `string`; `summary?`: `string`; } | {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `delete?`: { \[x: string]: any; \[x: number]: any; parameters?: ({ name?: string; in?: ParameterLocation; description?: string; required?: boolean; deprecated?: boolean; allowEmptyValue?: boolean; … 6 more …; content?: { …; }; } | { …; })\[]; requestBody?: { …; } | { …; }; responses?: { …; }; callbacks?: { …; }; s…; `get?`: { \[x: string]: any; \[x: number]: any; parameters?: ({ name?: string; in?: ParameterLocation; description?: string; required?: boolean; deprecated?: boolean; allowEmptyValue?: boolean; … 6 more …; content?: { …; }; } | { …; })\[]; requestBody?: { …; } | { …; }; responses?: { …; }; callbacks?: { …; }; s…; `head?`: { \[x: string]: any; \[x: number]: any; parameters?: ({ name?: string; in?: ParameterLocation; description?: string; required?: boolean; deprecated?: boolean; allowEmptyValue?: boolean; … 6 more …; content?: { …; }; } | { …; })\[]; requestBody?: { …; } | { …; }; responses?: { …; }; callbacks?: { …; }; s…; `options?`: { \[x: string]: any; \[x: number]: any; parameters?: ({ name?: string; in?: ParameterLocation; description?: string; required?: boolean; deprecated?: boolean; allowEmptyValue?: boolean; … 6 more …; content?: { …; }; } | { …; })\[]; requestBody?: { …; } | { …; }; responses?: { …; }; callbacks?: { …; }; s…; `parameters?`: ({ `allowEmptyValue?`: …; `allowReserved?`: …; `content?`: …; `deprecated?`: …; `description?`: …; `example?`: …; `examples?`: …; `explode?`: …; `in?`: …; `name?`: …; `required?`: …; `schema?`: …; `style?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `description?`: …; `summary?`: …; })\[]; `patch?`: { \[x: string]: any; \[x: number]: any; parameters?: ({ name?: string; in?: ParameterLocation; description?: string; required?: boolean; deprecated?: boolean; allowEmptyValue?: boolean; … 6 more …; content?: { …; }; } | { …; })\[]; requestBody?: { …; } | { …; }; responses?: { …; }; callbacks?: { …; }; s…; `post?`: { \[x: string]: any; \[x: number]: any; parameters?: ({ name?: string; in?: ParameterLocation; description?: string; required?: boolean; deprecated?: boolean; allowEmptyValue?: boolean; … 6 more …; content?: { …; }; } | { …; })\[]; requestBody?: { …; } | { …; }; responses?: { …; }; callbacks?: { …; }; s…; `put?`: { \[x: string]: any; \[x: number]: any; parameters?: ({ name?: string; in?: ParameterLocation; description?: string; required?: boolean; deprecated?: boolean; allowEmptyValue?: boolean; … 6 more …; content?: { …; }; } | { …; })\[]; requestBody?: { …; } | { …; }; responses?: { …; }; callbacks?: { …; }; s…; `servers?`: `object`\[]; `trace?`: { \[x: string]: any; \[x: number]: any; parameters?: ({ name?: string; in?: ParameterLocation; description?: string; required?: boolean; deprecated?: boolean; allowEmptyValue?: boolean; … 6 more …; content?: { …; }; } | { …; })\[]; requestBody?: { …; } | { …; }; responses?: { …; }; callbacks?: { …; }; s…; }; }; }; `parameters?`: ({ `allowEmptyValue?`: `boolean`; `allowReserved?`: `boolean`; `content?`: {\[`key`: `string`]: `object`; }; `deprecated?`: `boolean`; `description?`: `string`; `example?`: `any`; `examples?`: {\[`key`: `string`]: {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; } | { `description?`: `string`; `externalValue?`: `string`; `summary?`: `string`; `value?`: `any`; }; }; `explode?`: `boolean`; `in?`: `ParameterLocation`; `name?`: `string`; `required?`: `boolean`; `schema?`: {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; } | {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `additionalProperties?`: `boolean` | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: NonArraySchemaObjectType; … 33 more …; deprecated?: boolean; }; … 33 more …; deprecated?: boolean; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `additionalProperties?`: boolean | { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; …; `allOf?`: …\[]; `anyOf?`: …\[]; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…; `nullable?`: `boolean`; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: `NonArraySchemaObjectType`; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `attribute?`: …; `name?`: …; `namespace?`: …; `prefix?`: …; `wrapped?`: …; }; }; `allOf?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…\[]; `anyOf?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…\[]; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `mapping?`: {\[`key`: `string`]: `string`; }; `propertyName?`: `string`; }; `enum?`: `any`\[]; `example?`: `any`; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `externalDocs?`: { `description?`: `string`; `url?`: `string`; }; `format?`: `string`; `items?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…; `nullable?`: `boolean`; `oneOf?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: `string`]: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…; }; `properties?`: {\[`key`: `string`]: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…; }; `readOnly?`: `boolean`; `required?`: `string`\[]; `title?`: `string`; `type?`: `"array"`; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `attribute?`: `boolean`; `name?`: `string`; `namespace?`: `string`; `prefix?`: `string`; `wrapped?`: `boolean`; }; } | {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `additionalProperties?`: `boolean` | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `additionalProperties?`: boolean | { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; …; `allOf?`: …\[]; `anyOf?`: …\[]; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `items?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…; `nullable?`: `boolean`; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: `"array"`; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `attribute?`: …; `name?`: …; `namespace?`: …; `prefix?`: …; `wrapped?`: …; }; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: NonArraySchemaObjectType; title?: string; description?: string; format?: string; default?: any; multipleOf?: number; maximum?: number; … 27 more …; deprecated?: boolean; }; `allOf?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…\[]; `anyOf?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…\[]; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `mapping?`: {\[`key`: `string`]: `string`; }; `propertyName?`: `string`; }; `enum?`: `any`\[]; `example?`: `any`; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `externalDocs?`: { `description?`: `string`; `url?`: `string`; }; `format?`: `string`; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…; `nullable?`: `boolean`; `oneOf?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: `string`]: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…; }; `properties?`: {\[`key`: `string`]: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…; }; `readOnly?`: `boolean`; `required?`: `string`\[]; `title?`: `string`; `type?`: `NonArraySchemaObjectType`; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `attribute?`: `boolean`; `name?`: `string`; `namespace?`: `string`; `prefix?`: `string`; `wrapped?`: `boolean`; }; }; `style?`: `ParameterStyle`; } | {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `description?`: `string`; `summary?`: `string`; })\[]; `requestBody?`: {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `description?`: `string`; `summary?`: `string`; } | { `content?`: {\[`key`: `string`]: `object`; }; `description?`: `string`; `required?`: `boolean`; }; `responses?`: {\[`key`: `string`]: {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `description?`: `string`; `summary?`: `string`; } | {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `content?`: {\[`key`: `string`]: `object`; }; `headers?`: {\[`key`: `string`]: {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `description?`: `string`; `summary?`: `string`; } | { `allowEmptyValue?`: `boolean`; `allowReserved?`: `boolean`; `content?`: {\[`key`: `string`]: `object`; }; `deprecated?`: `boolean`; `description?`: `string`; `example?`: `any`; `examples?`: {\[`key`: `string`]: … | …; }; `explode?`: `boolean`; `required?`: `boolean`; `schema?`: {\[`key`: …]: …; \[`key`: …]: …; `$ref?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `nullable?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `nullable?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; }; `style?`: `ParameterStyle`; }; }; `links?`: {\[`key`: `string`]: {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `description?`: `string`; `summary?`: `string`; } | { `description?`: `string`; `operationId?`: `string`; `operationRef?`: `string`; `parameters?`: {\[`key`: `string`]: `any`; }; `requestBody?`: `any`; `server?`: { `description?`: `string`; `url?`: `string`; `variables?`: {\[`key`: …]: …; }; }; }; }; }; }; `servers?`: `object`\[]; } | {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `callbacks?`: {\[`key`: `string`]: {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `description?`: `string`; `summary?`: `string`; } | {\[`key`: `string`]: {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `description?`: `string`; `summary?`: `string`; } | {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `additionalOperations?`: {\[`key`: `string`]: { \[x: string]: any; \[x: number]: any; parameters?: ({ \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { description?: string; deprecated?: boolean; content?: { \[x: string]: { schema?: { …; } | … 1 more … | { …; }; example?: any; examples?: { …; }; encoding?: { …; }; }; }; …; }; `delete?`: { \[x: string]: any; \[x: number]: any; parameters?: ({ \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { description?: string; deprecated?: boolean; content?: { \[x: string]: { schema?: { …; } | … 1 more … | { …; }; example?: any; examples?: { …; }; encoding?: { …; }; }; }; …; `get?`: { \[x: string]: any; \[x: number]: any; parameters?: ({ \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { description?: string; deprecated?: boolean; content?: { \[x: string]: { schema?: { …; } | … 1 more … | { …; }; example?: any; examples?: { …; }; encoding?: { …; }; }; }; …; `head?`: { \[x: string]: any; \[x: number]: any; parameters?: ({ \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { description?: string; deprecated?: boolean; content?: { \[x: string]: { schema?: { …; } | … 1 more … | { …; }; example?: any; examples?: { …; }; encoding?: { …; }; }; }; …; `options?`: { \[x: string]: any; \[x: number]: any; parameters?: ({ \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { description?: string; deprecated?: boolean; content?: { \[x: string]: { schema?: { …; } | … 1 more … | { …; }; example?: any; examples?: { …; }; encoding?: { …; }; }; }; …; `parameters?`: ({\[`key`: …]: …; \[`key`: …]: …; `description?`: …; `summary?`: …; } | { `allowEmptyValue?`: …; `allowReserved?`: …; `content?`: …; `deprecated?`: …; `description?`: …; `example?`: …; `examples?`: …; `explode?`: …; `in?`: …; `name?`: …; `required?`: …; `schema?`: …; `style?`: …; })\[]; `patch?`: { \[x: string]: any; \[x: number]: any; parameters?: ({ \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { description?: string; deprecated?: boolean; content?: { \[x: string]: { schema?: { …; } | … 1 more … | { …; }; example?: any; examples?: { …; }; encoding?: { …; }; }; }; …; `post?`: { \[x: string]: any; \[x: number]: any; parameters?: ({ \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { description?: string; deprecated?: boolean; content?: { \[x: string]: { schema?: { …; } | … 1 more … | { …; }; example?: any; examples?: { …; }; encoding?: { …; }; }; }; …; `put?`: { \[x: string]: any; \[x: number]: any; parameters?: ({ \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { description?: string; deprecated?: boolean; content?: { \[x: string]: { schema?: { …; } | … 1 more … | { …; }; example?: any; examples?: { …; }; encoding?: { …; }; }; }; …; `query?`: { \[x: string]: any; \[x: number]: any; parameters?: ({ \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { description?: string; deprecated?: boolean; content?: { \[x: string]: { schema?: { …; } | … 1 more … | { …; }; example?: any; examples?: { …; }; encoding?: { …; }; }; }; …; `trace?`: { \[x: string]: any; \[x: number]: any; parameters?: ({ \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { description?: string; deprecated?: boolean; content?: { \[x: string]: { schema?: { …; } | … 1 more … | { …; }; example?: any; examples?: { …; }; encoding?: { …; }; }; }; …; }; }; }; `parameters?`: ({\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `description?`: `string`; `summary?`: `string`; } | { `allowEmptyValue?`: `boolean`; `allowReserved?`: `boolean`; `content?`: {\[`key`: `string`]: `object`; }; `deprecated?`: `boolean`; `description?`: `string`; `example?`: `any`; `examples?`: {\[`key`: `string`]: {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `description?`: `string`; `summary?`: `string`; } | { `dataValue?`: `any`; `description?`: `string`; `externalValue?`: `string`; `serializedValue?`: `string`; `summary?`: `string`; `value?`: `any`; }; }; `explode?`: `boolean`; `in?`: `ParameterLocation`; `name?`: `string`; `required?`: `boolean`; `schema?`: {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `description?`: `string`; `summary?`: `string`; } | {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `valueOf?`: `boolean`; } | {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `valueOf?`: `boolean`; } | {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: `boolean` | {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `description?`: `string`; `summary?`: `string`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `valueOf?`: `boolean`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `valueOf?`: `boolean`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: boolean | { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `allOf?`: …\[]; `anyOf?`: …\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `examples?`: …\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `items?`: … | … | … | … | … | …; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: … | … | … | … | … | …; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: `"array"`; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `attribute?`: …; `name?`: …; `namespace?`: …; `prefix?`: …; `wrapped?`: …; }; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: boolean | { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `allOf?`: …\[]; `anyOf?`: …\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `examples?`: …\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: … | … | … | … | … | …; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: `NonArraySchemaObjectType`; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `attribute?`: …; `name?`: …; `namespace?`: …; `prefix?`: …; `wrapped?`: …; }; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: boolean | { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `allOf?`: …\[]; `anyOf?`: …\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `examples?`: …\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `items?`: … | … | … | … | … | …; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: … | … | … | … | … | …; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: …\[]; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `attribute?`: …; `name?`: …; `namespace?`: …; `prefix?`: …; `wrapped?`: …; }; }; `allOf?`: ({\[`key`: …]: …; \[`key`: …]: …; `description?`: …; `summary?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; })\[]; `anyOf?`: ({\[`key`: …]: …; \[`key`: …]: …; `description?`: …; `summary?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; })\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `defaultMapping?`: `string`; `mapping?`: {\[`key`: `string`]: `string`; }; `propertyName?`: `string`; }; `enum?`: `any`\[]; `example?`: `any`; `examples?`: `object`\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: `string`; `url?`: `string`; }; `format?`: `string`; `items?`: { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `description?`: `string`; `summary?`: `string`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `valueOf?`: `boolean`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `valueOf?`: `boolean`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: … | … | … | … | … | … | … | …; `allOf?`: …\[]; `anyOf?`: …\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `examples?`: …\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `items?`: { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: `"array"`; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `attribute?`: …; `name?`: …; `namespace?`: …; `prefix?`: …; `wrapped?`: …; }; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: … | … | … | … | … | … | … | …; `allOf?`: …\[]; `anyOf?`: …\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `examples?`: …\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: `NonArraySchemaObjectType`; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `attribute?`: …; `name?`: …; `namespace?`: …; `prefix?`: …; `wrapped?`: …; }; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: … | … | … | … | … | … | … | …; `allOf?`: …\[]; `anyOf?`: …\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `examples?`: …\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `items?`: { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: …\[]; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `attribute?`: …; `name?`: …; `namespace?`: …; `prefix?`: …; `wrapped?`: …; }; }; `oneOf?`: ({\[`key`: …]: …; \[`key`: …]: …; `description?`: …; `summary?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; })\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: `string`]: {\[`key`: …]: …; \[`key`: …]: …; `description?`: …; `summary?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; }; }; `properties?`: {\[`key`: `string`]: {\[`key`: …]: …; \[`key`: …]: …; `description?`: …; `summary?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; }; }; `readOnly?`: `boolean`; `required?`: `string`\[]; `title?`: `string`; `type?`: `"array"`; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `name?`: `string`; `namespace?`: `string`; `nodeType?`: `XMLNodeType`; `prefix?`: `string`; }; } | {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: `boolean` | {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `description?`: `string`; `summary?`: `string`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `valueOf?`: `boolean`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `valueOf?`: `boolean`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: boolean | { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `allOf?`: …\[]; `anyOf?`: …\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `examples?`: …\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `items?`: … | … | … | … | … | …; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: … | … | … | … | … | …; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: `"array"`; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `attribute?`: …; `name?`: …; `namespace?`: …; `prefix?`: …; `wrapped?`: …; }; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: boolean | { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `allOf?`: …\[]; `anyOf?`: …\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `examples?`: …\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: … | … | … | … | … | …; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: `NonArraySchemaObjectType`; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `attribute?`: …; `name?`: …; `namespace?`: …; `prefix?`: …; `wrapped?`: …; }; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: boolean | { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `allOf?`: …\[]; `anyOf?`: …\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `examples?`: …\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `items?`: … | … | … | … | … | …; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: … | … | … | … | … | …; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: …\[]; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `attribute?`: …; `name?`: …; `namespace?`: …; `prefix?`: …; `wrapped?`: …; }; }; `allOf?`: ({\[`key`: …]: …; \[`key`: …]: …; `description?`: …; `summary?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; })\[]; `anyOf?`: ({\[`key`: …]: …; \[`key`: …]: …; `description?`: …; `summary?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; })\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `defaultMapping?`: `string`; `mapping?`: {\[`key`: `string`]: `string`; }; `propertyName?`: `string`; }; `enum?`: `any`\[]; `example?`: `any`; `examples?`: `object`\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: `string`; `url?`: `string`; }; `format?`: `string`; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `description?`: `string`; `summary?`: `string`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `valueOf?`: `boolean`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `valueOf?`: `boolean`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: … | … | … | … | … | … | … | …; `allOf?`: …\[]; `anyOf?`: …\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `examples?`: …\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `items?`: { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: `"array"`; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `attribute?`: …; `name?`: …; `namespace?`: …; `prefix?`: …; `wrapped?`: …; }; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: … | … | … | … | … | … | … | …; `allOf?`: …\[]; `anyOf?`: …\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `examples?`: …\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: `NonArraySchemaObjectType`; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `attribute?`: …; `name?`: …; `namespace?`: …; `prefix?`: …; `wrapped?`: …; }; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: … | … | … | … | … | … | … | …; `allOf?`: …\[]; `anyOf?`: …\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `examples?`: …\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `items?`: { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: …\[]; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `attribute?`: …; `name?`: …; `namespace?`: …; `prefix?`: …; `wrapped?`: …; }; }; `oneOf?`: ({\[`key`: …]: …; \[`key`: …]: …; `description?`: …; `summary?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; })\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: `string`]: {\[`key`: …]: …; \[`key`: …]: …; `description?`: …; `summary?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; }; }; `properties?`: {\[`key`: `string`]: {\[`key`: …]: …; \[`key`: …]: …; `description?`: …; `summary?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; }; }; `readOnly?`: `boolean`; `required?`: `string`\[]; `title?`: `string`; `type?`: `NonArraySchemaObjectType`; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `name?`: `string`; `namespace?`: `string`; `nodeType?`: `XMLNodeType`; `prefix?`: `string`; }; } | {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: `boolean` | {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `description?`: `string`; `summary?`: `string`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `valueOf?`: `boolean`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `valueOf?`: `boolean`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: boolean | { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `allOf?`: …\[]; `anyOf?`: …\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `examples?`: …\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `items?`: … | … | … | … | … | …; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: … | … | … | … | … | …; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: `"array"`; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `attribute?`: …; `name?`: …; `namespace?`: …; `prefix?`: …; `wrapped?`: …; }; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: boolean | { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `allOf?`: …\[]; `anyOf?`: …\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `examples?`: …\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: … | … | … | … | … | …; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: `NonArraySchemaObjectType`; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `attribute?`: …; `name?`: …; `namespace?`: …; `prefix?`: …; `wrapped?`: …; }; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: boolean | { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `allOf?`: …\[]; `anyOf?`: …\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `examples?`: …\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `items?`: … | … | … | … | … | …; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: … | … | … | … | … | …; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: …\[]; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `attribute?`: …; `name?`: …; `namespace?`: …; `prefix?`: …; `wrapped?`: …; }; }; `allOf?`: ({\[`key`: …]: …; \[`key`: …]: …; `description?`: …; `summary?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; })\[]; `anyOf?`: ({\[`key`: …]: …; \[`key`: …]: …; `description?`: …; `summary?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; })\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `defaultMapping?`: `string`; `mapping?`: {\[`key`: `string`]: `string`; }; `propertyName?`: `string`; }; `enum?`: `any`\[]; `example?`: `any`; `examples?`: `object`\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: `string`; `url?`: `string`; }; `format?`: `string`; `items?`: { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `description?`: `string`; `summary?`: `string`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `valueOf?`: `boolean`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `valueOf?`: `boolean`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: … | … | … | … | … | … | … | …; `allOf?`: …\[]; `anyOf?`: …\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `examples?`: …\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `items?`: { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: `"array"`; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `attribute?`: …; `name?`: …; `namespace?`: …; `prefix?`: …; `wrapped?`: …; }; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: … | … | … | … | … | … | … | …; `allOf?`: …\[]; `anyOf?`: …\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `examples?`: …\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: `NonArraySchemaObjectType`; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `attribute?`: …; `name?`: …; `namespace?`: …; `prefix?`: …; `wrapped?`: …; }; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: … | … | … | … | … | … | … | …; `allOf?`: …\[]; `anyOf?`: …\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `examples?`: …\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `items?`: { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: …\[]; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `attribute?`: …; `name?`: …; `namespace?`: …; `prefix?`: …; `wrapped?`: …; }; }; `oneOf?`: ({\[`key`: …]: …; \[`key`: …]: …; `description?`: …; `summary?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; })\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: `string`]: {\[`key`: …]: …; \[`key`: …]: …; `description?`: …; `summary?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; }; }; `properties?`: {\[`key`: `string`]: {\[`key`: …]: …; \[`key`: …]: …; `description?`: …; `summary?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; }; }; `readOnly?`: `boolean`; `required?`: `string`\[]; `title?`: `string`; `type?`: (`"array"` | `NonArraySchemaObjectType`)\[]; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `name?`: `string`; `namespace?`: `string`; `nodeType?`: `XMLNodeType`; `prefix?`: `string`; }; }; `style?`: `ParameterStyle`; })\[]; `requestBody?`: {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `description?`: `string`; `summary?`: `string`; } | { `content?`: {\[`key`: `string`]: {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `description?`: `string`; `summary?`: `string`; } | { `encoding?`: {\[`key`: `string`]: `object`; }; `example?`: `any`; `examples?`: {\[`key`: `string`]: {\[`key`: …]: …; \[`key`: …]: …; `description?`: …; `summary?`: …; } | { `dataValue?`: …; `description?`: …; `externalValue?`: …; `serializedValue?`: …; `summary?`: …; `value?`: …; }; }; `itemEncoding?`: { `allowReserved?`: `boolean`; `contentType?`: `string`; `encoding?`: {\[`key`: `string`]: { style?: string; explode?: boolean; allowReserved?: boolean; contentType?: string; headers?: { \[x: string]: { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { description?: string; … 9 more …; schema?: { …; } | … 4 more … | { …; }; }; }; encoding?: { …; }; prefixEncodi…; }; `explode?`: `boolean`; `headers?`: {\[`key`: `string`]: … | …; }; `itemEncoding?`: { style?: string; explode?: boolean; allowReserved?: boolean; contentType?: string; headers?: { \[x: string]: { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { description?: string; … 9 more …; schema?: { …; } | … 4 more … | { …; }; }; }; encoding?: { …; }; prefixEncodi…; `prefixEncoding?`: { style?: string; explode?: boolean; allowReserved?: boolean; contentType?: string; headers?: { \[x: string]: { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { description?: string; … 9 more …; schema?: { …; } | … 4 more … | { …; }; }; }; encoding?: { …; }; prefixEncodi…\[]; `style?`: `string`; }; `itemSchema?`: {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `description?`: `string`; `summary?`: `string`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `valueOf?`: `boolean`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `valueOf?`: `boolean`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: … | … | … | … | … | … | … | …; `allOf?`: …\[]; `anyOf?`: …\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `defaultMapping?`: …; `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `examples?`: …\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `items?`: { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: … | … | … | … | … | …; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: `"array"`; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `name?`: …; `namespace?`: …; `nodeType?`: …; `prefix?`: …; }; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: … | … | … | … | … | … | … | …; `allOf?`: …\[]; `anyOf?`: …\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `defaultMapping?`: …; `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `examples?`: …\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: … | … | … | … | … | …; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: `NonArraySchemaObjectType`; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `name?`: …; `namespace?`: …; `nodeType?`: …; `prefix?`: …; }; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: … | … | … | … | … | … | … | …; `allOf?`: …\[]; `anyOf?`: …\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `defaultMapping?`: …; `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `examples?`: …\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `items?`: { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: … | … | … | … | … | …; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: …\[]; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `name?`: …; `namespace?`: …; `nodeType?`: …; `prefix?`: …; }; }; `prefixEncoding?`: `object`\[]; `schema?`: {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `description?`: `string`; `summary?`: `string`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `valueOf?`: `boolean`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `valueOf?`: `boolean`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: … | … | … | … | … | … | … | …; `allOf?`: …\[]; `anyOf?`: …\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `defaultMapping?`: …; `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `examples?`: …\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `items?`: { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: … | … | … | … | … | …; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: `"array"`; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `name?`: …; `namespace?`: …; `nodeType?`: …; `prefix?`: …; }; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: … | … | … | … | … | … | … | …; `allOf?`: …\[]; `anyOf?`: …\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `defaultMapping?`: …; `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `examples?`: …\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: … | … | … | … | … | …; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: `NonArraySchemaObjectType`; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `name?`: …; `namespace?`: …; `nodeType?`: …; `prefix?`: …; }; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: … | … | … | … | … | … | … | …; `allOf?`: …\[]; `anyOf?`: …\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `defaultMapping?`: …; `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `examples?`: …\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `items?`: { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: … | … | … | … | … | …; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: …\[]; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `name?`: …; `namespace?`: …; `nodeType?`: …; `prefix?`: …; }; }; }; }; `description?`: `string`; `required?`: `boolean`; }; `responses?`: {\[`key`: `string`]: {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `description?`: `string`; `summary?`: `string`; } | {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `content?`: {\[`key`: `string`]: {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `description?`: `string`; `summary?`: `string`; } | { `encoding?`: {\[`key`: `string`]: `object`; }; `example?`: `any`; `examples?`: {\[`key`: `string`]: … | …; }; `itemEncoding?`: { `allowReserved?`: `boolean`; `contentType?`: `string`; `encoding?`: {\[`key`: …]: …; }; `explode?`: `boolean`; `headers?`: {\[`key`: …]: …; }; `itemEncoding?`: { style?: string; explode?: boolean; allowReserved?: boolean; contentType?: string; headers?: { \[x: string]: { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { description?: string; … 9 more …; schema?: { …; } | … 4 more … | { …; }; }; }; encoding?: { …; }; prefixEncodi…; `prefixEncoding?`: …\[]; `style?`: `string`; }; `itemSchema?`: {\[`key`: …]: …; \[`key`: …]: …; `description?`: …; `summary?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; }; `prefixEncoding?`: `object`\[]; `schema?`: {\[`key`: …]: …; \[`key`: …]: …; `description?`: …; `summary?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; }; }; }; `headers?`: {\[`key`: `string`]: {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `description?`: `string`; `summary?`: `string`; } | { `allowEmptyValue?`: `boolean`; `allowReserved?`: `boolean`; `content?`: {\[`key`: `string`]: … | …; }; `deprecated?`: `boolean`; `description?`: `string`; `example?`: `any`; `examples?`: {\[`key`: `string`]: … | …; }; `explode?`: `boolean`; `required?`: `boolean`; `schema?`: {\[`key`: …]: …; \[`key`: …]: …; `description?`: …; `summary?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; }; `style?`: `ParameterStyle`; }; }; `links?`: {\[`key`: `string`]: {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `description?`: `string`; `summary?`: `string`; } | { `description?`: `string`; `operationId?`: `string`; `operationRef?`: `string`; `parameters?`: {\[`key`: `string`]: `any`; }; `requestBody?`: `any`; `server?`: { `description?`: `string`; `name?`: `string`; `url?`: `string`; `variables?`: {\[`key`: …]: …; }; }; }; }; `summary?`: `string`; }; }; `servers?`: `object`\[]; } #### renderer? [Section titled “renderer?”](#renderer) > `optional` **renderer**: [`JSXRenderer`](/api/type-aliases/jsxrenderer/) Custom renderer for this route. #### requestTimeout? [Section titled “requestTimeout?”](#requesttimeout) > `optional` **requestTimeout**: `number` Timeout for this specific route (milliseconds). #### Inherited from [Section titled “Inherited from”](#inherited-from-4) `ShokupanRouter.config` *** ### metadata? [Section titled “metadata?”](#metadata) > `optional` **metadata**: [`RouteMetadata`](/api/interfaces/routemetadata/) Defined in: [src/router.ts:105](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L105) #### Inherited from [Section titled “Inherited from”](#inherited-from-5) `ShokupanRouter.metadata` *** ### middleware [Section titled “middleware”](#middleware) > **middleware**: [`Middleware`](/api/type-aliases/middleware/)\[] = `[]` Defined in: [src/router.ts:94](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L94) #### Inherited from [Section titled “Inherited from”](#inherited-from-6) `ShokupanRouter.middleware` *** ### requestTimeout? [Section titled “requestTimeout?”](#requesttimeout-1) > `optional` **requestTimeout**: `number` Defined in: [src/router.ts:792](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L792) #### Inherited from [Section titled “Inherited from”](#inherited-from-7) `ShokupanRouter.requestTimeout` ## Accessors [Section titled “Accessors”](#accessors) ### root [Section titled “root”](#root) #### Get Signature [Section titled “Get Signature”](#get-signature) > **get** **root**(): [`Shokupan`](/api/classes/shokupan/)<`any`> Defined in: [src/router.ts:99](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L99) ##### Returns [Section titled “Returns”](#returns-1) [`Shokupan`](/api/classes/shokupan/)<`any`> #### Inherited from [Section titled “Inherited from”](#inherited-from-8) `ShokupanRouter.root` *** ### rootConfig [Section titled “rootConfig”](#rootconfig) #### Get Signature [Section titled “Get Signature”](#get-signature-1) > **get** **rootConfig**(): `object` Defined in: [src/router.ts:96](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L96) ##### Returns [Section titled “Returns”](#returns-2) ###### autoBackpressureFeedback? [Section titled “autoBackpressureFeedback?”](#autobackpressurefeedback-1) > `optional` **autoBackpressureFeedback**: `boolean` Whether to enable automatic backpressure based on system CPU load. ###### Default [Section titled “Default”](#default-2) ```ts false ``` ###### autoBackpressureLevel? [Section titled “autoBackpressureLevel?”](#autobackpressurelevel-1) > `optional` **autoBackpressureLevel**: `number` The CPU usage percentage threshold (0-100) at which to start rejecting requests (429). ###### Default [Section titled “Default”](#default-3) ```ts 60 ``` ###### controllersOnly? [Section titled “controllersOnly?”](#controllersonly-1) > `optional` **controllersOnly**: `boolean` Whether to enforce that only controller classes (constructors) are accepted by the router. ###### Default [Section titled “Default”](#default-4) ```ts false ``` ###### development? [Section titled “development?”](#development) > `optional` **development**: `boolean` Whether to run in development mode. ###### Default [Section titled “Default”](#default-5) ```ts process.env.NODE_ENV !== "production" ``` ###### enableAsyncLocalStorage? [Section titled “enableAsyncLocalStorage?”](#enableasynclocalstorage) > `optional` **enableAsyncLocalStorage**: `boolean` Whether to enable AsyncLocalStorage. (Request local storage) ###### Default [Section titled “Default”](#default-6) ```ts false ``` ###### enableMiddlewareTracking? [Section titled “enableMiddlewareTracking?”](#enablemiddlewaretracking) > `optional` **enableMiddlewareTracking**: `boolean` Whether to enable middleware and handler tracking. When enabled, `ctx.handlerStack` will be populated with the handlers the request has passed through. Also, `ctx.state` will be a Proxy that tracks changes made by each handler. ###### Default [Section titled “Default”](#default-7) ```ts false ``` ###### enableOpenApiGen? [Section titled “enableOpenApiGen?”](#enableopenapigen) > `optional` **enableOpenApiGen**: `boolean` Whether to enable OpenAPI generation. ###### Default [Section titled “Default”](#default-8) ```ts true ``` ###### enableTracing? [Section titled “enableTracing?”](#enabletracing) > `optional` **enableTracing**: `boolean` Whether to enable OpenTelemetry tracing. ###### Default [Section titled “Default”](#default-9) ```ts false ``` ###### hooks? [Section titled “hooks?”](#hooks-1) > `optional` **hooks**: { `afterValidate?`: (`ctx`, `data`) => `void` | `Promise`<`void`>; `beforeValidate?`: (`ctx`, `data`) => `void` | `Promise`<`void`>; `onError?`: (`ctx`, `error`) => `void` | `Promise`<`void`>; `onReadTimeout?`: (`ctx`) => `void` | `Promise`<`void`>; `onRequestEnd?`: (`ctx`) => `void` | `Promise`<`void`>; `onRequestStart?`: (`ctx`) => `void` | `Promise`<`void`>; `onRequestTimeout?`: (`ctx`) => `void` | `Promise`<`void`>; `onResponseEnd?`: (`ctx`, `response`) => `void` | `Promise`<`void`>; `onResponseStart?`: (`ctx`, `response`) => `void` | `Promise`<`void`>; `onWriteTimeout?`: (`ctx`) => `void` | `Promise`<`void`>; } | `object`\[] Lifecycle hooks. ###### hostname? [Section titled “hostname?”](#hostname) > `optional` **hostname**: `string` The hostname to be used for the server. ###### Default [Section titled “Default”](#default-10) ```ts "localhost" ``` ###### httpLogger()? [Section titled “httpLogger()?”](#httplogger) > `optional` **httpLogger**: (`ctx`) => `void` HTTP logger function. ###### Parameters [Section titled “Parameters”](#parameters-1) ###### ctx [Section titled “ctx”](#ctx) [`ShokupanContext`](/api/classes/shokupancontext/)<`Record`<`string`, `any`>> ###### Returns [Section titled “Returns”](#returns-3) `void` ###### jsonParser? [Section titled “jsonParser?”](#jsonparser) > `optional` **jsonParser**: `"native"` | `"parse-json"` | `"secure-json-parse"` JSON parser to use for parsing request bodies. Options: * `'native'`: Use the built-in JSON.parse (fastest, default) * `'parse-json'`: Use the parse-json library for better error messages with minimal performance overhead (\~5% slower than native) * `'secure-json-parse'`: Use secure-json-parse for protection against prototype pollution (20-30% slower than native) Performance implications based on benchmarks: * `native`: Fastest option, excellent for production * `parse-json`: Nearly identical performance to native with better error messages, good for development * `secure-json-parse`: Provides security at the cost of performance, use only for untrusted input ###### Default [Section titled “Default”](#default-11) ```ts 'native' ``` ###### logger? [Section titled “logger?”](#logger) > `optional` **logger**: `object` Logger object. ###### logger.debug()? [Section titled “logger.debug()?”](#loggerdebug) > `optional` **debug**: (`msg`, `props`) => `void` ###### Parameters [Section titled “Parameters”](#parameters-2) ###### msg [Section titled “msg”](#msg) `string` ###### props [Section titled “props”](#props) `Record`<`string`, `any`> ###### Returns [Section titled “Returns”](#returns-4) `void` ###### logger.error()? [Section titled “logger.error()?”](#loggererror) > `optional` **error**: (`msg`, `props`) => `void` ###### Parameters [Section titled “Parameters”](#parameters-3) ###### msg [Section titled “msg”](#msg-1) `string` ###### props [Section titled “props”](#props-1) `Record`<`string`, `any`> ###### Returns [Section titled “Returns”](#returns-5) `void` ###### logger.fatal()? [Section titled “logger.fatal()?”](#loggerfatal) > `optional` **fatal**: (`msg`, `props`) => `void` Something fatally went wrong and the application cannot continue. ###### Parameters [Section titled “Parameters”](#parameters-4) ###### msg [Section titled “msg”](#msg-2) `string` ###### props [Section titled “props”](#props-2) `Record`<`string`, `any`> ###### Returns [Section titled “Returns”](#returns-6) `void` ###### logger.info()? [Section titled “logger.info()?”](#loggerinfo) > `optional` **info**: (`msg`, `props`) => `void` ###### Parameters [Section titled “Parameters”](#parameters-5) ###### msg [Section titled “msg”](#msg-3) `string` ###### props [Section titled “props”](#props-3) `Record`<`string`, `any`> ###### Returns [Section titled “Returns”](#returns-7) `void` ###### logger.verbose? [Section titled “logger.verbose?”](#loggerverbose) > `optional` **verbose**: `boolean` ###### logger.warning()? [Section titled “logger.warning()?”](#loggerwarning) > `optional` **warning**: (`msg`, `props`) => `void` ###### Parameters [Section titled “Parameters”](#parameters-6) ###### msg [Section titled “msg”](#msg-4) `string` ###### props [Section titled “props”](#props-4) `Record`<`string`, `any`> ###### Returns [Section titled “Returns”](#returns-8) `void` ###### middlewareTrackingMaxCapacity? [Section titled “middlewareTrackingMaxCapacity?”](#middlewaretrackingmaxcapacity) > `optional` **middlewareTrackingMaxCapacity**: `number` Maximum number of middleware executions to store in the datastore. Only applies when enableMiddlewareTracking is true. ###### Default [Section titled “Default”](#default-12) ```ts 10000 ``` ###### middlewareTrackingTTL? [Section titled “middlewareTrackingTTL?”](#middlewaretrackingttl) > `optional` **middlewareTrackingTTL**: `number` Time-to-live for middleware tracking entries in milliseconds. Entries older than this will be cleaned up. Only applies when enableMiddlewareTracking is true. ###### Default [Section titled “Default”](#default-13) ```ts 86400000 (1 day) ``` ###### port? [Section titled “port?”](#port) > `optional` **port**: `number` The port to be used for the server. ###### Default [Section titled “Default”](#default-14) ```ts 3000 ``` ###### readTimeout? [Section titled “readTimeout?”](#readtimeout) > `optional` **readTimeout**: `number` Timeout for reading the request body (milliseconds). Maps to Bun’s `idleTimeout`. ###### Default [Section titled “Default”](#default-15) ```ts 30000 ``` ###### renderer? [Section titled “renderer?”](#renderer-1) > `optional` **renderer**: [`JSXRenderer`](/api/type-aliases/jsxrenderer/) JSX Rendering function. ###### requestTimeout? [Section titled “requestTimeout?”](#requesttimeout-2) > `optional` **requestTimeout**: `number` Timeout for processing the request (milliseconds). Maps to `server.timeout(req, seconds)`. ###### Default [Section titled “Default”](#default-16) ```ts 0 (disabled) ``` ###### reusePort? [Section titled “reusePort?”](#reuseport) > `optional` **reusePort**: `boolean` Whether to reuse the port. ###### Default [Section titled “Default”](#default-17) ```ts false ``` ###### serverFactory? [Section titled “serverFactory?”](#serverfactory) > `optional` **serverFactory**: [`ServerFactory`](/api/interfaces/serverfactory/) Factory function to create the server instance. Defaults to Bun.serve. ###### validateStatusCodes? [Section titled “validateStatusCodes?”](#validatestatuscodes) > `optional` **validateStatusCodes**: `boolean` Whether to validate response status codes. ###### Default [Section titled “Default”](#default-18) ```ts true ``` ###### writeTimeout? [Section titled “writeTimeout?”](#writetimeout) > `optional` **writeTimeout**: `number` Timeout for writing the response (milliseconds). Not currently supported by Bun.serve natively. Experimental This API should not be used in production and may be trimmed from a public release. #### Inherited from [Section titled “Inherited from”](#inherited-from-9) `ShokupanRouter.rootConfig` ## Methods [Section titled “Methods”](#methods) ### add() [Section titled “add()”](#add) > **add**(`arg`): `ScalarPlugin` Defined in: [src/router.ts:808](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L808) Adds a route to the router. #### Parameters [Section titled “Parameters”](#parameters-7) ##### arg [Section titled “arg”](#arg) Route configuration object ###### controller? [Section titled “controller?”](#controller) `any` Controller for the route ###### group? [Section titled “group?”](#group-1) `string` Group for the route ###### handler [Section titled “handler”](#handler) [`ShokupanHandler`](/api/type-aliases/shokupanhandler/)<`any`> Route handler function ###### method [Section titled “method”](#method) [`Method`](/api/type-aliases/method/) HTTP method ###### path [Section titled “path”](#path) `string` URL path ###### regex? [Section titled “regex?”](#regex) `RegExp` Custom regex for path matching ###### renderer? [Section titled “renderer?”](#renderer-2) [`JSXRenderer`](/api/type-aliases/jsxrenderer/) JSX renderer for the route ###### requestTimeout? [Section titled “requestTimeout?”](#requesttimeout-3) `number` Timeout for this route in milliseconds ###### spec? [Section titled “spec?”](#spec) [`MethodAPISpec`](/api/type-aliases/methodapispec/) OpenAPI specification for the route #### Returns [Section titled “Returns”](#returns-9) `ScalarPlugin` #### Inherited from [Section titled “Inherited from”](#inherited-from-10) `ShokupanRouter.add` *** ### delete() [Section titled “delete()”](#delete) #### Call Signature [Section titled “Call Signature”](#call-signature) > **delete**<`Path`>(`path`, …`handlers`): `any` Defined in: [src/router.ts:1079](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L1079) Adds a DELETE route to the router. ##### Type Parameters [Section titled “Type Parameters”](#type-parameters) ###### Path [Section titled “Path”](#path-1) `Path` *extends* `string` ##### Parameters [Section titled “Parameters”](#parameters-8) ###### path [Section titled “path”](#path-2) `Path` URL path ###### handlers [Section titled “handlers”](#handlers) …[`ShokupanHandler`](/api/type-aliases/shokupanhandler/)<`any`, [`RouteParams`](/api/type-aliases/routeparams/)<`Path`>>\[] Route handler functions ##### Returns [Section titled “Returns”](#returns-10) `any` ##### Inherited from [Section titled “Inherited from”](#inherited-from-11) `ShokupanRouter.delete` #### Call Signature [Section titled “Call Signature”](#call-signature-1) > **delete**<`Path`>(`path`, `spec`, …`handlers`): `any` Defined in: [src/router.ts:1087](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L1087) Adds a DELETE route to the router. ##### Type Parameters [Section titled “Type Parameters”](#type-parameters-1) ###### Path [Section titled “Path”](#path-3) `Path` *extends* `string` ##### Parameters [Section titled “Parameters”](#parameters-9) ###### path [Section titled “path”](#path-4) `Path` URL path ###### spec [Section titled “spec”](#spec-1) [`MethodAPISpec`](/api/type-aliases/methodapispec/) OpenAPI specification for the route ###### handlers [Section titled “handlers”](#handlers-1) …[`ShokupanHandler`](/api/type-aliases/shokupanhandler/)<`any`, [`RouteParams`](/api/type-aliases/routeparams/)<`Path`>>\[] Route handler functions ##### Returns [Section titled “Returns”](#returns-11) `any` ##### Inherited from [Section titled “Inherited from”](#inherited-from-12) `ShokupanRouter.delete` *** ### find() [Section titled “find()”](#find) > **find**(`method`, `path`): `object` Defined in: [src/router.ts:726](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L726) Find a route matching the given method and path. #### Parameters [Section titled “Parameters”](#parameters-10) ##### method [Section titled “method”](#method-1) `string` HTTP method ##### path [Section titled “path”](#path-5) `string` Request path #### Returns [Section titled “Returns”](#returns-12) `object` Route handler and parameters if found, otherwise null ##### handler [Section titled “handler”](#handler-1) > **handler**: [`ShokupanHandler`](/api/type-aliases/shokupanhandler/)<`any`> ##### params [Section titled “params”](#params) > **params**: `Record`<`string`, `string`> #### Inherited from [Section titled “Inherited from”](#inherited-from-13) `ShokupanRouter.find` *** ### generateApiSpec() [Section titled “generateApiSpec()”](#generateapispec) > **generateApiSpec**(`options`): `any` Defined in: [src/router.ts:1306](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L1306) Generates an OpenAPI 3.1 Document by recursing through the router and its descendants. Now includes runtime analysis of handler functions to infer request/response types. #### Parameters [Section titled “Parameters”](#parameters-11) ##### options [Section titled “options”](#options) [`OpenAPIOptions`](/api/interfaces/openapioptions/) = `{}` #### Returns [Section titled “Returns”](#returns-13) `any` #### Inherited from [Section titled “Inherited from”](#inherited-from-14) `ShokupanRouter.generateApiSpec` *** ### get() [Section titled “get()”](#get) #### Call Signature [Section titled “Call Signature”](#call-signature-2) > **get**<`Path`>(`path`, …`handlers`): `any` Defined in: [src/router.ts:1019](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L1019) Adds a GET route to the router. ##### Type Parameters [Section titled “Type Parameters”](#type-parameters-2) ###### Path [Section titled “Path”](#path-6) `Path` *extends* `string` ##### Parameters [Section titled “Parameters”](#parameters-12) ###### path [Section titled “path”](#path-7) `Path` URL path ###### handlers [Section titled “handlers”](#handlers-2) …[`ShokupanHandler`](/api/type-aliases/shokupanhandler/)<`any`, [`RouteParams`](/api/type-aliases/routeparams/)<`Path`>>\[] Route handler functions ##### Returns [Section titled “Returns”](#returns-14) `any` ##### Inherited from [Section titled “Inherited from”](#inherited-from-15) `ShokupanRouter.get` #### Call Signature [Section titled “Call Signature”](#call-signature-3) > **get**<`Path`>(`path`, `spec`, …`handlers`): `any` Defined in: [src/router.ts:1027](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L1027) Adds a GET route to the router. ##### Type Parameters [Section titled “Type Parameters”](#type-parameters-3) ###### Path [Section titled “Path”](#path-8) `Path` *extends* `string` ##### Parameters [Section titled “Parameters”](#parameters-13) ###### path [Section titled “path”](#path-9) `Path` URL path ###### spec [Section titled “spec”](#spec-2) [`MethodAPISpec`](/api/type-aliases/methodapispec/) OpenAPI specification for the route ###### handlers [Section titled “handlers”](#handlers-3) …[`ShokupanHandler`](/api/type-aliases/shokupanhandler/)<`any`, [`RouteParams`](/api/type-aliases/routeparams/)<`Path`>>\[] Route handler functions ##### Returns [Section titled “Returns”](#returns-15) `any` ##### Inherited from [Section titled “Inherited from”](#inherited-from-16) `ShokupanRouter.get` *** ### getComponentRegistry() [Section titled “getComponentRegistry()”](#getcomponentregistry) > **getComponentRegistry**(): `object` Defined in: [src/router.ts:110](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L110) #### Returns [Section titled “Returns”](#returns-16) `object` ##### controllers [Section titled “controllers”](#controllers) > **controllers**: `object`\[] ##### metadata [Section titled “metadata”](#metadata-1) > **metadata**: [`RouteMetadata`](/api/interfaces/routemetadata/) ##### middleware [Section titled “middleware”](#middleware-1) > **middleware**: `object`\[] ##### routers [Section titled “routers”](#routers) > **routers**: `object`\[] ##### routes [Section titled “routes”](#routes-1) > **routes**: `object`\[] #### Inherited from [Section titled “Inherited from”](#inherited-from-17) `ShokupanRouter.getComponentRegistry` *** ### getRoutes() [Section titled “getRoutes()”](#getroutes) > **getRoutes**(): `object`\[] Defined in: [src/router.ts:229](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L229) Returns all routes attached to this router and its descendants. #### Returns [Section titled “Returns”](#returns-17) `object`\[] #### Inherited from [Section titled “Inherited from”](#inherited-from-18) `ShokupanRouter.getRoutes` *** ### guard() [Section titled “guard()”](#guard) #### Call Signature [Section titled “Call Signature”](#call-signature-4) > **guard**(`handler`): `void` Defined in: [src/router.ts:1159](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L1159) Adds a guard to the router that applies to all routes added **after** this point. Guards must return true or call `ctx.next()` to allow the request to continue. ##### Parameters [Section titled “Parameters”](#parameters-14) ###### handler [Section titled “handler”](#handler-2) [`ShokupanHandler`](/api/type-aliases/shokupanhandler/)<`any`> Guard handler function ##### Returns [Section titled “Returns”](#returns-18) `void` ##### Inherited from [Section titled “Inherited from”](#inherited-from-19) `ShokupanRouter.guard` #### Call Signature [Section titled “Call Signature”](#call-signature-5) > **guard**(`spec`, `handler`): `any` Defined in: [src/router.ts:1167](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L1167) Adds a guard to the router that applies to all routes added **after** this point. Guards must return true or call `ctx.next()` to allow the request to continue. ##### Parameters [Section titled “Parameters”](#parameters-15) ###### spec [Section titled “spec”](#spec-3) [`GuardAPISpec`](/api/type-aliases/guardapispec/) OpenAPI specification for the guard ###### handler [Section titled “handler”](#handler-3) [`ShokupanHandler`](/api/type-aliases/shokupanhandler/)<`any`> Guard handler function ##### Returns [Section titled “Returns”](#returns-19) `any` ##### Inherited from [Section titled “Inherited from”](#inherited-from-20) `ShokupanRouter.guard` *** ### head() [Section titled “head()”](#head) #### Call Signature [Section titled “Call Signature”](#call-signature-6) > **head**<`Path`>(`path`, …`handlers`): `any` Defined in: [src/router.ts:1139](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L1139) Adds a HEAD route to the router. ##### Type Parameters [Section titled “Type Parameters”](#type-parameters-4) ###### Path [Section titled “Path”](#path-10) `Path` *extends* `string` ##### Parameters [Section titled “Parameters”](#parameters-16) ###### path [Section titled “path”](#path-11) `Path` URL path ###### handlers [Section titled “handlers”](#handlers-4) …[`ShokupanHandler`](/api/type-aliases/shokupanhandler/)<`any`, [`RouteParams`](/api/type-aliases/routeparams/)<`Path`>>\[] Route handler functions ##### Returns [Section titled “Returns”](#returns-20) `any` ##### Inherited from [Section titled “Inherited from”](#inherited-from-21) `ShokupanRouter.head` #### Call Signature [Section titled “Call Signature”](#call-signature-7) > **head**<`Path`>(`path`, `spec`, …`handlers`): `any` Defined in: [src/router.ts:1147](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L1147) Adds a HEAD route to the router. ##### Type Parameters [Section titled “Type Parameters”](#type-parameters-5) ###### Path [Section titled “Path”](#path-12) `Path` *extends* `string` ##### Parameters [Section titled “Parameters”](#parameters-17) ###### path [Section titled “path”](#path-13) `Path` URL path ###### spec [Section titled “spec”](#spec-4) [`MethodAPISpec`](/api/type-aliases/methodapispec/) OpenAPI specification for the route ###### handlers [Section titled “handlers”](#handlers-5) …[`ShokupanHandler`](/api/type-aliases/shokupanhandler/)<`any`, [`RouteParams`](/api/type-aliases/routeparams/)<`Path`>>\[] Route handler functions ##### Returns [Section titled “Returns”](#returns-21) `any` ##### Inherited from [Section titled “Inherited from”](#inherited-from-22) `ShokupanRouter.head` *** ### internalRequest() [Section titled “internalRequest()”](#internalrequest) > **internalRequest**(`arg`): `Promise`<`Response`> Defined in: [src/router.ts:261](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L261) Makes an internal request through this router’s full routing pipeline. This is useful for calling other routes internally and supports streaming responses. #### Parameters [Section titled “Parameters”](#parameters-18) ##### arg [Section titled “arg”](#arg-1) `string` | { `body?`: `any`; `headers?`: [`HeadersInit`](/api/type-aliases/headersinit/); `method?`: [`Method`](/api/type-aliases/method/); `path`: `string`; } #### Returns [Section titled “Returns”](#returns-22) `Promise`<`Response`> The raw Response object. #### Inherited from [Section titled “Inherited from”](#inherited-from-23) `ShokupanRouter.internalRequest` *** ### mount() [Section titled “mount()”](#mount) > **mount**(`prefix`, `controller`): `ScalarPlugin` Defined in: [src/router.ts:205](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L205) Mounts a controller instance to a path prefix. Controller can be a convection router or an arbitrary class. Routes are derived from method names: * get(ctx) -> GET /prefix/ * getUsers(ctx) -> GET /prefix/users * postCreate(ctx) -> POST /prefix/create #### Parameters [Section titled “Parameters”](#parameters-19) ##### prefix [Section titled “prefix”](#prefix) `string` ##### controller [Section titled “controller”](#controller-1) `Record`<`string`, `any`> | `ShokupanRouter`<`any`> | [`ShokupanController`](/api/type-aliases/shokupancontroller/) | `ShokupanRouter`<`Record`<`string`, `any`>> | [`ShokupanController`](/api/type-aliases/shokupancontroller/)<`any`> #### Returns [Section titled “Returns”](#returns-23) `ScalarPlugin` #### Inherited from [Section titled “Inherited from”](#inherited-from-24) `ShokupanRouter.mount` *** ### onInit() [Section titled “onInit()”](#oninit) > **onInit**(`app`, `options?`): `void` Defined in: [src/plugins/application/scalar.ts:46](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/application/scalar.ts#L46) #### Parameters [Section titled “Parameters”](#parameters-20) ##### app [Section titled “app”](#app) [`Shokupan`](/api/classes/shokupan/) ##### options? [Section titled “options?”](#options-1) [`ShokupanPluginOptions`](/api/interfaces/shokupanpluginoptions/) #### Returns [Section titled “Returns”](#returns-24) `void` #### Implementation of [Section titled “Implementation of”](#implementation-of) [`ShokupanPlugin`](/api/interfaces/shokupanplugin/).[`onInit`](/api/interfaces/shokupanplugin/#oninit) *** ### onMount() [Section titled “onMount()”](#onmount) > **onMount**(`parent`): `void` Defined in: [src/plugins/application/scalar.ts:114](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/application/scalar.ts#L114) #### Parameters [Section titled “Parameters”](#parameters-21) ##### parent [Section titled “parent”](#parent) `ShokupanRouter`<`any`> #### Returns [Section titled “Returns”](#returns-25) `void` *** ### options() [Section titled “options()”](#options-2) #### Call Signature [Section titled “Call Signature”](#call-signature-8) > **options**<`Path`>(`path`, …`handlers`): `any` Defined in: [src/router.ts:1119](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L1119) Adds a OPTIONS route to the router. ##### Type Parameters [Section titled “Type Parameters”](#type-parameters-6) ###### Path [Section titled “Path”](#path-14) `Path` *extends* `string` ##### Parameters [Section titled “Parameters”](#parameters-22) ###### path [Section titled “path”](#path-15) `Path` URL path ###### handlers [Section titled “handlers”](#handlers-6) …[`ShokupanHandler`](/api/type-aliases/shokupanhandler/)<`any`, [`RouteParams`](/api/type-aliases/routeparams/)<`Path`>>\[] Route handler functions ##### Returns [Section titled “Returns”](#returns-26) `any` ##### Inherited from [Section titled “Inherited from”](#inherited-from-25) `ShokupanRouter.options` #### Call Signature [Section titled “Call Signature”](#call-signature-9) > **options**<`Path`>(`path`, `spec`, …`handlers`): `any` Defined in: [src/router.ts:1127](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L1127) Adds a OPTIONS route to the router. ##### Type Parameters [Section titled “Type Parameters”](#type-parameters-7) ###### Path [Section titled “Path”](#path-16) `Path` *extends* `string` ##### Parameters [Section titled “Parameters”](#parameters-23) ###### path [Section titled “path”](#path-17) `Path` URL path ###### spec [Section titled “spec”](#spec-5) [`MethodAPISpec`](/api/type-aliases/methodapispec/) OpenAPI specification for the route ###### handlers [Section titled “handlers”](#handlers-7) …[`ShokupanHandler`](/api/type-aliases/shokupanhandler/)<`any`, [`RouteParams`](/api/type-aliases/routeparams/)<`Path`>>\[] Route handler functions ##### Returns [Section titled “Returns”](#returns-27) `any` ##### Inherited from [Section titled “Inherited from”](#inherited-from-26) `ShokupanRouter.options` *** ### patch() [Section titled “patch()”](#patch) #### Call Signature [Section titled “Call Signature”](#call-signature-10) > **patch**<`Path`>(`path`, …`handlers`): `any` Defined in: [src/router.ts:1099](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L1099) Adds a PATCH route to the router. ##### Type Parameters [Section titled “Type Parameters”](#type-parameters-8) ###### Path [Section titled “Path”](#path-18) `Path` *extends* `string` ##### Parameters [Section titled “Parameters”](#parameters-24) ###### path [Section titled “path”](#path-19) `Path` URL path ###### handlers [Section titled “handlers”](#handlers-8) …[`ShokupanHandler`](/api/type-aliases/shokupanhandler/)<`any`, [`RouteParams`](/api/type-aliases/routeparams/)<`Path`>>\[] Route handler functions ##### Returns [Section titled “Returns”](#returns-28) `any` ##### Inherited from [Section titled “Inherited from”](#inherited-from-27) `ShokupanRouter.patch` #### Call Signature [Section titled “Call Signature”](#call-signature-11) > **patch**<`Path`>(`path`, `spec`, …`handlers`): `any` Defined in: [src/router.ts:1107](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L1107) Adds a PATCH route to the router. ##### Type Parameters [Section titled “Type Parameters”](#type-parameters-9) ###### Path [Section titled “Path”](#path-20) `Path` *extends* `string` ##### Parameters [Section titled “Parameters”](#parameters-25) ###### path [Section titled “path”](#path-21) `Path` URL path ###### spec [Section titled “spec”](#spec-6) [`MethodAPISpec`](/api/type-aliases/methodapispec/) OpenAPI specification for the route ###### handlers [Section titled “handlers”](#handlers-9) …[`ShokupanHandler`](/api/type-aliases/shokupanhandler/)<`any`, [`RouteParams`](/api/type-aliases/routeparams/)<`Path`>>\[] Route handler functions ##### Returns [Section titled “Returns”](#returns-29) `any` ##### Inherited from [Section titled “Inherited from”](#inherited-from-28) `ShokupanRouter.patch` *** ### post() [Section titled “post()”](#post) #### Call Signature [Section titled “Call Signature”](#call-signature-12) > **post**<`Path`>(`path`, …`handlers`): `any` Defined in: [src/router.ts:1039](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L1039) Adds a POST route to the router. ##### Type Parameters [Section titled “Type Parameters”](#type-parameters-10) ###### Path [Section titled “Path”](#path-22) `Path` *extends* `string` ##### Parameters [Section titled “Parameters”](#parameters-26) ###### path [Section titled “path”](#path-23) `Path` URL path ###### handlers [Section titled “handlers”](#handlers-10) …[`ShokupanHandler`](/api/type-aliases/shokupanhandler/)<`any`, [`RouteParams`](/api/type-aliases/routeparams/)<`Path`>>\[] Route handler functions ##### Returns [Section titled “Returns”](#returns-30) `any` ##### Inherited from [Section titled “Inherited from”](#inherited-from-29) `ShokupanRouter.post` #### Call Signature [Section titled “Call Signature”](#call-signature-13) > **post**<`Path`>(`path`, `spec`, …`handlers`): `any` Defined in: [src/router.ts:1047](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L1047) Adds a POST route to the router. ##### Type Parameters [Section titled “Type Parameters”](#type-parameters-11) ###### Path [Section titled “Path”](#path-24) `Path` *extends* `string` ##### Parameters [Section titled “Parameters”](#parameters-27) ###### path [Section titled “path”](#path-25) `Path` URL path ###### spec [Section titled “spec”](#spec-7) [`MethodAPISpec`](/api/type-aliases/methodapispec/) OpenAPI specification for the route ###### handlers [Section titled “handlers”](#handlers-11) …[`ShokupanHandler`](/api/type-aliases/shokupanhandler/)<`any`, [`RouteParams`](/api/type-aliases/routeparams/)<`Path`>>\[] Route handler functions ##### Returns [Section titled “Returns”](#returns-31) `any` ##### Inherited from [Section titled “Inherited from”](#inherited-from-30) `ShokupanRouter.post` *** ### put() [Section titled “put()”](#put) #### Call Signature [Section titled “Call Signature”](#call-signature-14) > **put**<`Path`>(`path`, …`handlers`): `any` Defined in: [src/router.ts:1059](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L1059) Adds a PUT route to the router. ##### Type Parameters [Section titled “Type Parameters”](#type-parameters-12) ###### Path [Section titled “Path”](#path-26) `Path` *extends* `string` ##### Parameters [Section titled “Parameters”](#parameters-28) ###### path [Section titled “path”](#path-27) `Path` URL path ###### handlers [Section titled “handlers”](#handlers-12) …[`ShokupanHandler`](/api/type-aliases/shokupanhandler/)<`any`, [`RouteParams`](/api/type-aliases/routeparams/)<`Path`>>\[] Route handler functions ##### Returns [Section titled “Returns”](#returns-32) `any` ##### Inherited from [Section titled “Inherited from”](#inherited-from-31) `ShokupanRouter.put` #### Call Signature [Section titled “Call Signature”](#call-signature-15) > **put**<`Path`>(`path`, `spec`, …`handlers`): `any` Defined in: [src/router.ts:1067](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L1067) Adds a PUT route to the router. ##### Type Parameters [Section titled “Type Parameters”](#type-parameters-13) ###### Path [Section titled “Path”](#path-28) `Path` *extends* `string` ##### Parameters [Section titled “Parameters”](#parameters-29) ###### path [Section titled “path”](#path-29) `Path` URL path ###### spec [Section titled “spec”](#spec-8) [`MethodAPISpec`](/api/type-aliases/methodapispec/) OpenAPI specification for the route ###### handlers [Section titled “handlers”](#handlers-13) …[`ShokupanHandler`](/api/type-aliases/shokupanhandler/)<`any`, [`RouteParams`](/api/type-aliases/routeparams/)<`Path`>>\[] Route handler functions ##### Returns [Section titled “Returns”](#returns-33) `any` ##### Inherited from [Section titled “Inherited from”](#inherited-from-32) `ShokupanRouter.put` *** ### runHooks() [Section titled “runHooks()”](#runhooks) > **runHooks**(`name`, …`args`): `Promise`<`void`> Defined in: [src/router.ts:1339](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L1339) #### Parameters [Section titled “Parameters”](#parameters-30) ##### name [Section titled “name”](#name-1) keyof [`ShokupanHooks`](/api/interfaces/shokupanhooks/)<`any`> ##### args [Section titled “args”](#args) …`any`\[] #### Returns [Section titled “Returns”](#returns-34) `Promise`<`void`> #### Inherited from [Section titled “Inherited from”](#inherited-from-33) `ShokupanRouter.runHooks` *** ### static() [Section titled “static()”](#static) > **static**(`uriPath`, `options`): `ScalarPlugin` Defined in: [src/router.ts:1217](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L1217) Statically serves a directory with standard options. #### Parameters [Section titled “Parameters”](#parameters-31) ##### uriPath [Section titled “uriPath”](#uripath) `string` URL path prefix ##### options [Section titled “options”](#options-3) Configuration options or root directory string `string` | [`StaticServeOptions`](/api/interfaces/staticserveoptions/)<`any`> #### Returns [Section titled “Returns”](#returns-35) `ScalarPlugin` #### Inherited from [Section titled “Inherited from”](#inherited-from-34) `ShokupanRouter.static` *** ### testRequest() [Section titled “testRequest()”](#testrequest) > **testRequest**(`options`): `Promise`<[`ProcessResult`](/api/interfaces/processresult/)> Defined in: [src/router.ts:293](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L293) Processes a request for testing purposes. Returns a simplified { status, headers, data } object instead of a Response. #### Parameters [Section titled “Parameters”](#parameters-32) ##### options [Section titled “options”](#options-4) [`RequestOptions`](/api/interfaces/requestoptions/) #### Returns [Section titled “Returns”](#returns-36) `Promise`<[`ProcessResult`](/api/interfaces/processresult/)> #### Inherited from [Section titled “Inherited from”](#inherited-from-35) `ShokupanRouter.testRequest`
# Shokupan
Defined in: [src/shokupan.ts:93](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/shokupan.ts#L93) Shokupan Application The main application class for creating a Shokupan web server. ## Template [Section titled “Template”](#template) The shape of `ctx.state` for all routes in the application. Use this to provide type safety for state management across middleware and handlers. ## Examples [Section titled “Examples”](#examples) ```typescript const app = new Shokupan(); app.get('/hello', (ctx) => ctx.json({ message: 'Hello' })); await app.listen(3000); ``` ```typescript interface AppState { userId: string; tenant: string; requestId: string; } const app = new Shokupan(); // Middleware has typed state access app.use((ctx, next) => { ctx.state.userId = 'user-123'; // ✓ Type-safe ctx.state.requestId = crypto.randomUUID(); return next(); }); // Handlers have typed state access app.get('/profile', (ctx) => { const { userId, tenant } = ctx.state; // ✓ TypeScript knows these exist return ctx.json({ userId, tenant }); }); ``` ```typescript import { EmptyState } from 'shokupan'; const app = new Shokupan(); // ctx.state will be an empty object with no properties ``` ```typescript interface RequestState { userId: string; permissions: string[]; } const app = new Shokupan(); app.get('/users/:userId/posts/:postId', (ctx) => { // Both params and state are fully typed! const { userId, postId } = ctx.params; // ✓ Path params typed const { permissions } = ctx.state; // ✓ State typed return ctx.json({ userId, postId, permissions }); }); ``` ## Extends [Section titled “Extends”](#extends) * `ShokupanRouter`<`T`> ## Type Parameters [Section titled “Type Parameters”](#type-parameters) ### T [Section titled “T”](#t) `T` = `any` ## Constructors [Section titled “Constructors”](#constructors) ### Constructor [Section titled “Constructor”](#constructor) > **new Shokupan**<`T`>(`applicationConfig`): `Shokupan`<`T`> Defined in: [src/shokupan.ts:104](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/shokupan.ts#L104) #### Parameters [Section titled “Parameters”](#parameters) ##### applicationConfig [Section titled “applicationConfig”](#applicationconfig) ###### autoBackpressureFeedback? [Section titled “autoBackpressureFeedback?”](#autobackpressurefeedback) `boolean` Whether to enable automatic backpressure based on system CPU load. **Default** ```ts false ``` ###### autoBackpressureLevel? [Section titled “autoBackpressureLevel?”](#autobackpressurelevel) `number` The CPU usage percentage threshold (0-100) at which to start rejecting requests (429). **Default** ```ts 60 ``` ###### controllersOnly? [Section titled “controllersOnly?”](#controllersonly) `boolean` Whether to enforce that only controller classes (constructors) are accepted by the router. **Default** ```ts false ``` ###### development? [Section titled “development?”](#development) `boolean` Whether to run in development mode. **Default** ```ts process.env.NODE_ENV !== "production" ``` ###### enableAsyncLocalStorage? [Section titled “enableAsyncLocalStorage?”](#enableasynclocalstorage) `boolean` Whether to enable AsyncLocalStorage. (Request local storage) **Default** ```ts false ``` ###### enableMiddlewareTracking? [Section titled “enableMiddlewareTracking?”](#enablemiddlewaretracking) `boolean` Whether to enable middleware and handler tracking. When enabled, `ctx.handlerStack` will be populated with the handlers the request has passed through. Also, `ctx.state` will be a Proxy that tracks changes made by each handler. **Default** ```ts false ``` ###### enableOpenApiGen? [Section titled “enableOpenApiGen?”](#enableopenapigen) `boolean` Whether to enable OpenAPI generation. **Default** ```ts true ``` ###### enableTracing? [Section titled “enableTracing?”](#enabletracing) `boolean` Whether to enable OpenTelemetry tracing. **Default** ```ts false ``` ###### hooks? [Section titled “hooks?”](#hooks) { `afterValidate?`: (`ctx`, `data`) => `void` | `Promise`<`void`>; `beforeValidate?`: (`ctx`, `data`) => `void` | `Promise`<`void`>; `onError?`: (`ctx`, `error`) => `void` | `Promise`<`void`>; `onReadTimeout?`: (`ctx`) => `void` | `Promise`<`void`>; `onRequestEnd?`: (`ctx`) => `void` | `Promise`<`void`>; `onRequestStart?`: (`ctx`) => `void` | `Promise`<`void`>; `onRequestTimeout?`: (`ctx`) => `void` | `Promise`<`void`>; `onResponseEnd?`: (`ctx`, `response`) => `void` | `Promise`<`void`>; `onResponseStart?`: (`ctx`, `response`) => `void` | `Promise`<`void`>; `onWriteTimeout?`: (`ctx`) => `void` | `Promise`<`void`>; } | `object`\[] Lifecycle hooks. ###### hostname? [Section titled “hostname?”](#hostname) `string` The hostname to be used for the server. **Default** ```ts "localhost" ``` ###### httpLogger? [Section titled “httpLogger?”](#httplogger) (`ctx`) => `void` HTTP logger function. ###### jsonParser? [Section titled “jsonParser?”](#jsonparser) `"native"` | `"parse-json"` | `"secure-json-parse"` JSON parser to use for parsing request bodies. Options: * `'native'`: Use the built-in JSON.parse (fastest, default) * `'parse-json'`: Use the parse-json library for better error messages with minimal performance overhead (\~5% slower than native) * `'secure-json-parse'`: Use secure-json-parse for protection against prototype pollution (20-30% slower than native) Performance implications based on benchmarks: * `native`: Fastest option, excellent for production * `parse-json`: Nearly identical performance to native with better error messages, good for development * `secure-json-parse`: Provides security at the cost of performance, use only for untrusted input **Default** ```ts 'native' ``` ###### logger? [Section titled “logger?”](#logger) { `debug?`: (`msg`, `props`) => `void`; `error?`: (`msg`, `props`) => `void`; `fatal?`: (`msg`, `props`) => `void`; `info?`: (`msg`, `props`) => `void`; `verbose?`: `boolean`; `warning?`: (`msg`, `props`) => `void`; } Logger object. ###### logger.debug? [Section titled “logger.debug?”](#loggerdebug) (`msg`, `props`) => `void` ###### logger.error? [Section titled “logger.error?”](#loggererror) (`msg`, `props`) => `void` ###### logger.fatal? [Section titled “logger.fatal?”](#loggerfatal) (`msg`, `props`) => `void` Something fatally went wrong and the application cannot continue. ###### logger.info? [Section titled “logger.info?”](#loggerinfo) (`msg`, `props`) => `void` ###### logger.verbose? [Section titled “logger.verbose?”](#loggerverbose) `boolean` ###### logger.warning? [Section titled “logger.warning?”](#loggerwarning) (`msg`, `props`) => `void` ###### middlewareTrackingMaxCapacity? [Section titled “middlewareTrackingMaxCapacity?”](#middlewaretrackingmaxcapacity) `number` Maximum number of middleware executions to store in the datastore. Only applies when enableMiddlewareTracking is true. **Default** ```ts 10000 ``` ###### middlewareTrackingTTL? [Section titled “middlewareTrackingTTL?”](#middlewaretrackingttl) `number` Time-to-live for middleware tracking entries in milliseconds. Entries older than this will be cleaned up. Only applies when enableMiddlewareTracking is true. **Default** ```ts 86400000 (1 day) ``` ###### port? [Section titled “port?”](#port) `number` The port to be used for the server. **Default** ```ts 3000 ``` ###### readTimeout? [Section titled “readTimeout?”](#readtimeout) `number` Timeout for reading the request body (milliseconds). Maps to Bun’s `idleTimeout`. **Default** ```ts 30000 ``` ###### renderer? [Section titled “renderer?”](#renderer) [`JSXRenderer`](/api/type-aliases/jsxrenderer/) JSX Rendering function. ###### requestTimeout? [Section titled “requestTimeout?”](#requesttimeout) `number` Timeout for processing the request (milliseconds). Maps to `server.timeout(req, seconds)`. **Default** ```ts 0 (disabled) ``` ###### reusePort? [Section titled “reusePort?”](#reuseport) `boolean` Whether to reuse the port. **Default** ```ts false ``` ###### serverFactory? [Section titled “serverFactory?”](#serverfactory) [`ServerFactory`](/api/interfaces/serverfactory/) Factory function to create the server instance. Defaults to Bun.serve. ###### validateStatusCodes? [Section titled “validateStatusCodes?”](#validatestatuscodes) `boolean` Whether to validate response status codes. **Default** ```ts true ``` ###### writeTimeout? [Section titled “writeTimeout?”](#writetimeout) `number` Timeout for writing the response (milliseconds). Not currently supported by Bun.serve natively. Experimental This API should not be used in production and may be trimmed from a public release. #### Returns [Section titled “Returns”](#returns) `Shokupan`<`T`> #### Overrides [Section titled “Overrides”](#overrides) `ShokupanRouter.constructor` ## Properties [Section titled “Properties”](#properties) ### \[$childControllers] [Section titled “\[$childControllers\]”](#childcontrollers) > **\[$childControllers]**: [`ShokupanController`](/api/type-aliases/shokupancontroller/)\[] = `[]` Defined in: [src/router.ts:89](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L89) #### Inherited from [Section titled “Inherited from”](#inherited-from) `ShokupanRouter.[$childControllers]` *** ### \[$childRouters] [Section titled “\[$childRouters\]”](#childrouters) > **\[$childRouters]**: `ShokupanRouter`<`T`>\[] = `[]` Defined in: [src/router.ts:88](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L88) #### Inherited from [Section titled “Inherited from”](#inherited-from-1) `ShokupanRouter.[$childRouters]` *** ### \[$mountPath] [Section titled “\[$mountPath\]”](#mountpath) > **\[$mountPath]**: `string` = `"/"` Defined in: [src/router.ts:85](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L85) #### Inherited from [Section titled “Inherited from”](#inherited-from-2) `ShokupanRouter.[$mountPath]` *** ### \[$routes] [Section titled “\[$routes\]”](#routes) > **\[$routes]**: [`ShokupanRoute`](/api/type-aliases/shokupanroute/)\[] = `[]` Defined in: [src/router.ts:103](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L103) #### Inherited from [Section titled “Inherited from”](#inherited-from-3) `ShokupanRouter.[$routes]` *** ### applicationConfig [Section titled “applicationConfig”](#applicationconfig-1) > `readonly` **applicationConfig**: `object` = `{}` Defined in: [src/shokupan.ts:94](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/shokupan.ts#L94) #### Index Signature [Section titled “Index Signature”](#index-signature) \[`key`: `string`]: `any` #### autoBackpressureFeedback? [Section titled “autoBackpressureFeedback?”](#autobackpressurefeedback-1) > `optional` **autoBackpressureFeedback**: `boolean` Whether to enable automatic backpressure based on system CPU load. ##### Default [Section titled “Default”](#default) ```ts false ``` #### autoBackpressureLevel? [Section titled “autoBackpressureLevel?”](#autobackpressurelevel-1) > `optional` **autoBackpressureLevel**: `number` The CPU usage percentage threshold (0-100) at which to start rejecting requests (429). ##### Default [Section titled “Default”](#default-1) ```ts 60 ``` #### controllersOnly? [Section titled “controllersOnly?”](#controllersonly-1) > `optional` **controllersOnly**: `boolean` Whether to enforce that only controller classes (constructors) are accepted by the router. ##### Default [Section titled “Default”](#default-2) ```ts false ``` #### development? [Section titled “development?”](#development-1) > `optional` **development**: `boolean` Whether to run in development mode. ##### Default [Section titled “Default”](#default-3) ```ts process.env.NODE_ENV !== "production" ``` #### enableAsyncLocalStorage? [Section titled “enableAsyncLocalStorage?”](#enableasynclocalstorage-1) > `optional` **enableAsyncLocalStorage**: `boolean` Whether to enable AsyncLocalStorage. (Request local storage) ##### Default [Section titled “Default”](#default-4) ```ts false ``` #### enableMiddlewareTracking? [Section titled “enableMiddlewareTracking?”](#enablemiddlewaretracking-1) > `optional` **enableMiddlewareTracking**: `boolean` Whether to enable middleware and handler tracking. When enabled, `ctx.handlerStack` will be populated with the handlers the request has passed through. Also, `ctx.state` will be a Proxy that tracks changes made by each handler. ##### Default [Section titled “Default”](#default-5) ```ts false ``` #### enableOpenApiGen? [Section titled “enableOpenApiGen?”](#enableopenapigen-1) > `optional` **enableOpenApiGen**: `boolean` Whether to enable OpenAPI generation. ##### Default [Section titled “Default”](#default-6) ```ts true ``` #### enableTracing? [Section titled “enableTracing?”](#enabletracing-1) > `optional` **enableTracing**: `boolean` Whether to enable OpenTelemetry tracing. ##### Default [Section titled “Default”](#default-7) ```ts false ``` #### hooks? [Section titled “hooks?”](#hooks-1) > `optional` **hooks**: { `afterValidate?`: (`ctx`, `data`) => `void` | `Promise`<`void`>; `beforeValidate?`: (`ctx`, `data`) => `void` | `Promise`<`void`>; `onError?`: (`ctx`, `error`) => `void` | `Promise`<`void`>; `onReadTimeout?`: (`ctx`) => `void` | `Promise`<`void`>; `onRequestEnd?`: (`ctx`) => `void` | `Promise`<`void`>; `onRequestStart?`: (`ctx`) => `void` | `Promise`<`void`>; `onRequestTimeout?`: (`ctx`) => `void` | `Promise`<`void`>; `onResponseEnd?`: (`ctx`, `response`) => `void` | `Promise`<`void`>; `onResponseStart?`: (`ctx`, `response`) => `void` | `Promise`<`void`>; `onWriteTimeout?`: (`ctx`) => `void` | `Promise`<`void`>; } | `object`\[] Lifecycle hooks. #### hostname? [Section titled “hostname?”](#hostname-1) > `optional` **hostname**: `string` The hostname to be used for the server. ##### Default [Section titled “Default”](#default-8) ```ts "localhost" ``` #### httpLogger()? [Section titled “httpLogger()?”](#httplogger-1) > `optional` **httpLogger**: (`ctx`) => `void` HTTP logger function. ##### Parameters [Section titled “Parameters”](#parameters-1) ###### ctx [Section titled “ctx”](#ctx) [`ShokupanContext`](/api/classes/shokupancontext/)<`Record`<`string`, `any`>> ##### Returns [Section titled “Returns”](#returns-1) `void` #### jsonParser? [Section titled “jsonParser?”](#jsonparser-1) > `optional` **jsonParser**: `"native"` | `"parse-json"` | `"secure-json-parse"` JSON parser to use for parsing request bodies. Options: * `'native'`: Use the built-in JSON.parse (fastest, default) * `'parse-json'`: Use the parse-json library for better error messages with minimal performance overhead (\~5% slower than native) * `'secure-json-parse'`: Use secure-json-parse for protection against prototype pollution (20-30% slower than native) Performance implications based on benchmarks: * `native`: Fastest option, excellent for production * `parse-json`: Nearly identical performance to native with better error messages, good for development * `secure-json-parse`: Provides security at the cost of performance, use only for untrusted input ##### Default [Section titled “Default”](#default-9) ```ts 'native' ``` #### logger? [Section titled “logger?”](#logger-1) > `optional` **logger**: `object` Logger object. ##### logger.debug()? [Section titled “logger.debug()?”](#loggerdebug-1) > `optional` **debug**: (`msg`, `props`) => `void` ###### Parameters [Section titled “Parameters”](#parameters-2) ###### msg [Section titled “msg”](#msg) `string` ###### props [Section titled “props”](#props) `Record`<`string`, `any`> ###### Returns [Section titled “Returns”](#returns-2) `void` ##### logger.error()? [Section titled “logger.error()?”](#loggererror-1) > `optional` **error**: (`msg`, `props`) => `void` ###### Parameters [Section titled “Parameters”](#parameters-3) ###### msg [Section titled “msg”](#msg-1) `string` ###### props [Section titled “props”](#props-1) `Record`<`string`, `any`> ###### Returns [Section titled “Returns”](#returns-3) `void` ##### logger.fatal()? [Section titled “logger.fatal()?”](#loggerfatal-1) > `optional` **fatal**: (`msg`, `props`) => `void` Something fatally went wrong and the application cannot continue. ###### Parameters [Section titled “Parameters”](#parameters-4) ###### msg [Section titled “msg”](#msg-2) `string` ###### props [Section titled “props”](#props-2) `Record`<`string`, `any`> ###### Returns [Section titled “Returns”](#returns-4) `void` ##### logger.info()? [Section titled “logger.info()?”](#loggerinfo-1) > `optional` **info**: (`msg`, `props`) => `void` ###### Parameters [Section titled “Parameters”](#parameters-5) ###### msg [Section titled “msg”](#msg-3) `string` ###### props [Section titled “props”](#props-3) `Record`<`string`, `any`> ###### Returns [Section titled “Returns”](#returns-5) `void` ##### logger.verbose? [Section titled “logger.verbose?”](#loggerverbose-1) > `optional` **verbose**: `boolean` ##### logger.warning()? [Section titled “logger.warning()?”](#loggerwarning-1) > `optional` **warning**: (`msg`, `props`) => `void` ###### Parameters [Section titled “Parameters”](#parameters-6) ###### msg [Section titled “msg”](#msg-4) `string` ###### props [Section titled “props”](#props-4) `Record`<`string`, `any`> ###### Returns [Section titled “Returns”](#returns-6) `void` #### middlewareTrackingMaxCapacity? [Section titled “middlewareTrackingMaxCapacity?”](#middlewaretrackingmaxcapacity-1) > `optional` **middlewareTrackingMaxCapacity**: `number` Maximum number of middleware executions to store in the datastore. Only applies when enableMiddlewareTracking is true. ##### Default [Section titled “Default”](#default-10) ```ts 10000 ``` #### middlewareTrackingTTL? [Section titled “middlewareTrackingTTL?”](#middlewaretrackingttl-1) > `optional` **middlewareTrackingTTL**: `number` Time-to-live for middleware tracking entries in milliseconds. Entries older than this will be cleaned up. Only applies when enableMiddlewareTracking is true. ##### Default [Section titled “Default”](#default-11) ```ts 86400000 (1 day) ``` #### port? [Section titled “port?”](#port-1) > `optional` **port**: `number` The port to be used for the server. ##### Default [Section titled “Default”](#default-12) ```ts 3000 ``` #### readTimeout? [Section titled “readTimeout?”](#readtimeout-1) > `optional` **readTimeout**: `number` Timeout for reading the request body (milliseconds). Maps to Bun’s `idleTimeout`. ##### Default [Section titled “Default”](#default-13) ```ts 30000 ``` #### renderer? [Section titled “renderer?”](#renderer-1) > `optional` **renderer**: [`JSXRenderer`](/api/type-aliases/jsxrenderer/) JSX Rendering function. #### requestTimeout? [Section titled “requestTimeout?”](#requesttimeout-1) > `optional` **requestTimeout**: `number` Timeout for processing the request (milliseconds). Maps to `server.timeout(req, seconds)`. ##### Default [Section titled “Default”](#default-14) ```ts 0 (disabled) ``` #### reusePort? [Section titled “reusePort?”](#reuseport-1) > `optional` **reusePort**: `boolean` Whether to reuse the port. ##### Default [Section titled “Default”](#default-15) ```ts false ``` #### serverFactory? [Section titled “serverFactory?”](#serverfactory-1) > `optional` **serverFactory**: [`ServerFactory`](/api/interfaces/serverfactory/) Factory function to create the server instance. Defaults to Bun.serve. #### validateStatusCodes? [Section titled “validateStatusCodes?”](#validatestatuscodes-1) > `optional` **validateStatusCodes**: `boolean` Whether to validate response status codes. ##### Default [Section titled “Default”](#default-16) ```ts true ``` #### writeTimeout? [Section titled “writeTimeout?”](#writetimeout-1) > `optional` **writeTimeout**: `number` Timeout for writing the response (milliseconds). Not currently supported by Bun.serve natively. Experimental This API should not be used in production and may be trimmed from a public release. *** ### config? [Section titled “config?”](#config) > `readonly` `optional` **config**: `object` Defined in: [src/router.ts:183](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L183) #### autoBackpressureFeedback? [Section titled “autoBackpressureFeedback?”](#autobackpressurefeedback-2) > `optional` **autoBackpressureFeedback**: `boolean` Whether to enable automatic backpressure based on system CPU load. ##### Default [Section titled “Default”](#default-17) ```ts false ``` #### autoBackpressureLevel? [Section titled “autoBackpressureLevel?”](#autobackpressurelevel-2) > `optional` **autoBackpressureLevel**: `number` The CPU usage percentage threshold (0-100) at which to start rejecting requests. #### controllersOnly? [Section titled “controllersOnly?”](#controllersonly-2) > `optional` **controllersOnly**: `boolean` Whether to enforce that only controller classes (constructors) are accepted by the router. ##### Default [Section titled “Default”](#default-18) ```ts false ``` #### group? [Section titled “group?”](#group) > `optional` **group**: `string` #### hooks? [Section titled “hooks?”](#hooks-2) > `optional` **hooks**: { `afterValidate?`: (`ctx`, `data`) => `void` | `Promise`<`void`>; `beforeValidate?`: (`ctx`, `data`) => `void` | `Promise`<`void`>; `onError?`: (`ctx`, `error`) => `void` | `Promise`<`void`>; `onReadTimeout?`: (`ctx`) => `void` | `Promise`<`void`>; `onRequestEnd?`: (`ctx`) => `void` | `Promise`<`void`>; `onRequestStart?`: (`ctx`) => `void` | `Promise`<`void`>; `onRequestTimeout?`: (`ctx`) => `void` | `Promise`<`void`>; `onResponseEnd?`: (`ctx`, `response`) => `void` | `Promise`<`void`>; `onResponseStart?`: (`ctx`, `response`) => `void` | `Promise`<`void`>; `onWriteTimeout?`: (`ctx`) => `void` | `Promise`<`void`>; } | `object`\[] Hooks for this route/router. #### name? [Section titled “name?”](#name) > `optional` **name**: `string` #### openapi? [Section titled “openapi?”](#openapi) > `optional` **openapi**: {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `consumes?`: `string`\[]; `deprecated?`: `boolean`; `description?`: `string`; `externalDocs?`: {\[`key`: `string`]: `any`; `description?`: `string`; `url?`: `string`; }; `operationId?`: `string`; `parameters?`: ({\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; } | {\[`key`: `string`]: `any`; `description?`: `string`; `in?`: `ParameterLocation`; `name?`: `string`; `required?`: `boolean`; `schema?`: {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; } | {\[`key`: `string`]: `any`; \[`key`: `` `x-${string}` ``]: `any`; `$ref?`: `string`; `$schema?`: `string`; `additionalItems?`: `boolean` | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; `$schema?`: `string`; `additionalItems?`: boolean | { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; … 23 more …; $ref?: string; }; `additionalProperties?`: boolean | { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; … 23 more …; $ref?: string; }; `allOf?`: …\[]; `anyOf?`: …\[]; `definitions?`: {\[`key`: …]: …; }; `dependencies?`: {\[`key`: …]: …; }; `description?`: `string`; `enum?`: …\[]; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `id?`: `string`; `items?`: … | …; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `required?`: …\[]; `title?`: `string`; `type?`: … | …; `uniqueItems?`: `boolean`; }; `additionalProperties?`: `boolean` | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; `$schema?`: `string`; `additionalItems?`: boolean | { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; … 23 more …; $ref?: string; }; `additionalProperties?`: boolean | { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; … 23 more …; $ref?: string; }; `allOf?`: …\[]; `anyOf?`: …\[]; `definitions?`: {\[`key`: …]: …; }; `dependencies?`: {\[`key`: …]: …; }; `description?`: `string`; `enum?`: …\[]; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `id?`: `string`; `items?`: … | …; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `required?`: …\[]; `title?`: `string`; `type?`: … | …; `uniqueItems?`: `boolean`; }; `allOf?`: `object`\[]; `anyOf?`: `object`\[]; `default?`: `any`; `definitions?`: {\[`key`: `string`]: `object`; }; `dependencies?`: {\[`key`: `string`]: …\[] | {\[`key`: …]: …; \[`key`: …]: …; `$ref?`: …; `$schema?`: …; `additionalItems?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `definitions?`: …; `dependencies?`: …; `description?`: …; `enum?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `id?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; }; }; `description?`: `string`; `discriminator?`: `string`; `enum?`: `any`\[]; `example?`: `any`; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `externalDocs?`: {\[`key`: `string`]: `any`; `description?`: `string`; `url?`: `string`; }; `id?`: `string`; `items?`: {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; `$schema?`: `string`; `additionalItems?`: … | … | …; `additionalProperties?`: … | … | …; `allOf?`: …\[]; `anyOf?`: …\[]; `definitions?`: {\[`key`: …]: …; }; `dependencies?`: {\[`key`: …]: …; }; `description?`: `string`; `enum?`: …\[]; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `id?`: `string`; `items?`: … | …; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: {\[`key`: …]: …; \[`key`: …]: …; `$ref?`: …; `$schema?`: …; `additionalItems?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `definitions?`: …; `dependencies?`: …; `description?`: …; `enum?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `id?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; }; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `required?`: …\[]; `title?`: `string`; `type?`: … | …; `uniqueItems?`: `boolean`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; \[`key`: `number`]: `object`; `[unscopables]?`: {\[`key`: …]: …; `[iterator]?`: …; `[unscopables]?`: …; `at?`: …; `concat?`: …; `copyWithin?`: …; `entries?`: …; `every?`: …; `fill?`: …; `filter?`: …; `find?`: …; `findIndex?`: …; `findLast?`: …; `findLastIndex?`: …; `flat?`: …; `flatMap?`: …; `forEach?`: …; `includes?`: …; `indexOf?`: …; `join?`: …; `keys?`: …; `lastIndexOf?`: …; `length?`: …; `map?`: …; `pop?`: …; `push?`: …; `reduce?`: …; `reduceRight?`: …; `reverse?`: …; `shift?`: …; `slice?`: …; `some?`: …; `sort?`: …; `splice?`: …; `toLocaleString?`: …; `toReversed?`: …; `toSorted?`: …; `toSpliced?`: …; `toString?`: …; `unshift?`: …; `values?`: …; `with?`: …; }; `$ref?`: `string`; `length?`: `number`; `[iterator]?`: `ArrayIterator`<…>; `at?`: `IJsonSchema`; `concat?`: …\[]; `copyWithin?`: `this`; `entries?`: `ArrayIterator`<…>; `every?`: `this is (...)[]`; `fill?`: `this`; `filter?`: …\[]; `find?`: `S`; `findIndex?`: `number`; `findLast?`: `S`; `findLastIndex?`: `number`; `flat?`: …\[]; `flatMap?`: …\[]; `forEach?`: `void`; `includes?`: `boolean`; `indexOf?`: `number`; `join?`: `string`; `keys?`: `ArrayIterator`<…>; `lastIndexOf?`: `number`; `map?`: …\[]; `pop?`: `IJsonSchema`; `push?`: `number`; `reduce?`: `IJsonSchema`; `reduceRight?`: `IJsonSchema`; `reverse?`: …\[]; `shift?`: `IJsonSchema`; `slice?`: …\[]; `some?`: `boolean`; `sort?`: `this`; `splice?`: …\[]; `toLocaleString?`: `string`; `toReversed?`: …\[]; `toSorted?`: …\[]; `toSpliced?`: …\[]; `toString?`: `string`; `unshift?`: `number`; `values?`: `ArrayIterator`<…>; `with?`: …\[]; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; `$schema?`: `string`; `additionalItems?`: … | … | …; `additionalProperties?`: … | … | …; `allOf?`: …\[]; `anyOf?`: …\[]; `collectionFormat?`: `string`; `default?`: `any`; `definitions?`: {\[`key`: …]: …; }; `dependencies?`: {\[`key`: …]: …; }; `description?`: `string`; `enum?`: …\[]; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `format?`: `string`; `id?`: `string`; `items?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; … 22 more …; not?: { …; }; } | { …; } | { …; } | { …; }; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: {\[`key`: …]: …; \[`key`: …]: …; `$ref?`: …; `$schema?`: …; `additionalItems?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `definitions?`: …; `dependencies?`: …; `description?`: …; `enum?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `id?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; }; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `required?`: …\[]; `title?`: `string`; `type?`: … | …; `uniqueItems?`: `boolean`; } | {\[`key`: `number`]: `object`; `[unscopables]?`: {\[`key`: …]: …; `[iterator]?`: …; `[unscopables]?`: …; `at?`: …; `concat?`: …; `copyWithin?`: …; `entries?`: …; `every?`: …; `fill?`: …; `filter?`: …; `find?`: …; `findIndex?`: …; `findLast?`: …; `findLastIndex?`: …; `flat?`: …; `flatMap?`: …; `forEach?`: …; `includes?`: …; `indexOf?`: …; `join?`: …; `keys?`: …; `lastIndexOf?`: …; `length?`: …; `map?`: …; `pop?`: …; `push?`: …; `reduce?`: …; `reduceRight?`: …; `reverse?`: …; `shift?`: …; `slice?`: …; `some?`: …; `sort?`: …; `splice?`: …; `toLocaleString?`: …; `toReversed?`: …; `toSorted?`: …; `toSpliced?`: …; `toString?`: …; `unshift?`: …; `values?`: …; `with?`: …; }; `$ref?`: `string`; `collectionFormat?`: `string`; `default?`: `any`; `enum?`: …\[]; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `format?`: `string`; `items?`: … | …; `length?`: `number`; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `multipleOf?`: `number`; `pattern?`: `string`; `type?`: `string`; `uniqueItems?`: `boolean`; `[iterator]?`: `ArrayIterator`<…>; `at?`: `IJsonSchema`; `concat?`: …\[]; `copyWithin?`: `this`; `entries?`: `ArrayIterator`<…>; `every?`: `this is (...)[]`; `fill?`: `this`; `filter?`: …\[]; `find?`: `S`; `findIndex?`: `number`; `findLast?`: `S`; `findLastIndex?`: `number`; `flat?`: …\[]; `flatMap?`: …\[]; `forEach?`: `void`; `includes?`: `boolean`; `indexOf?`: `number`; `join?`: `string`; `keys?`: `ArrayIterator`<…>; `lastIndexOf?`: `number`; `map?`: …\[]; `pop?`: `IJsonSchema`; `push?`: `number`; `reduce?`: `IJsonSchema`; `reduceRight?`: `IJsonSchema`; `reverse?`: …\[]; `shift?`: `IJsonSchema`; `slice?`: …\[]; `some?`: `boolean`; `sort?`: `this`; `splice?`: …\[]; `toLocaleString?`: `string`; `toReversed?`: …\[]; `toSorted?`: …\[]; `toSpliced?`: …\[]; `toString?`: `string`; `unshift?`: `number`; `values?`: `ArrayIterator`<…>; `with?`: …\[]; }; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; `$schema?`: `string`; `additionalItems?`: `boolean` | { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }; `additionalProperties?`: `boolean` | { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }; `allOf?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }\[]; `anyOf?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }\[]; `definitions?`: {\[`key`: `string`]: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }; }; `dependencies?`: {\[`key`: `string`]: … | …; }; `description?`: `string`; `enum?`: `any`\[]; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `id?`: `string`; `items?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; } | …\[]; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }; `oneOf?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: `string`]: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }; }; `properties?`: {\[`key`: `string`]: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }; }; `required?`: `string`\[]; `title?`: `string`; `type?`: `string` | …\[]; `uniqueItems?`: `boolean`; }; `oneOf?`: `object`\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: `string`]: `object`; }; `properties?`: {\[`key`: `string`]: `object`; }; `readOnly?`: `boolean`; `required?`: `string`\[]; `title?`: `string`; `type?`: `string` | `string`\[]; `uniqueItems?`: `boolean`; `xml?`: {\[`key`: `string`]: `any`; `attribute?`: `boolean`; `name?`: `string`; `namespace?`: `string`; `prefix?`: `string`; `wrapped?`: `boolean`; }; }; } | {\[`key`: `string`]: `any`; `$ref?`: `string`; `allowEmptyValue?`: `boolean`; `collectionFormat?`: `string`; `default?`: `any`; `description?`: `string`; `enum?`: `any`\[]; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `format?`: `string`; `in?`: `ParameterLocation`; `items?`: {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; } | { `$ref?`: `string`; `collectionFormat?`: `string`; `default?`: `any`; `enum?`: `any`\[]; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `format?`: `string`; `items?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { type?: string; format?: string; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | …; collectionFormat?: string; default?: any; … 12 more …; $ref?: string; }; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `multipleOf?`: `number`; `pattern?`: `string`; `type?`: `string`; `uniqueItems?`: `boolean`; }; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `multipleOf?`: `number`; `name?`: `string`; `pattern?`: `string`; `required?`: `boolean`; `type?`: `string`; `uniqueItems?`: `boolean`; })\[]; `produces?`: `string`\[]; `responses?`: {\[`key`: `string`]: {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; } | {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `description?`: `string`; `examples?`: {\[`key`: `string`]: `any`; }; `headers?`: {\[`key`: `string`]: `object`; }; `schema?`: {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; } | {\[`key`: `string`]: `any`; \[`key`: `` `x-${string}` ``]: `any`; `$ref?`: `string`; `$schema?`: `string`; `additionalItems?`: `boolean` | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; `$schema?`: `string`; `additionalItems?`: boolean | { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; … 23 more …; $ref?: string; }; `additionalProperties?`: boolean | { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; … 23 more …; $ref?: string; }; `allOf?`: …\[]; `anyOf?`: …\[]; `definitions?`: {\[`key`: …]: …; }; `dependencies?`: {\[`key`: …]: …; }; `description?`: `string`; `enum?`: …\[]; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `id?`: `string`; `items?`: … | …; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `required?`: …\[]; `title?`: `string`; `type?`: … | …; `uniqueItems?`: `boolean`; }; `additionalProperties?`: `boolean` | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; `$schema?`: `string`; `additionalItems?`: boolean | { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; … 23 more …; $ref?: string; }; `additionalProperties?`: boolean | { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; … 23 more …; $ref?: string; }; `allOf?`: …\[]; `anyOf?`: …\[]; `definitions?`: {\[`key`: …]: …; }; `dependencies?`: {\[`key`: …]: …; }; `description?`: `string`; `enum?`: …\[]; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `id?`: `string`; `items?`: … | …; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `required?`: …\[]; `title?`: `string`; `type?`: … | …; `uniqueItems?`: `boolean`; }; `allOf?`: `object`\[]; `anyOf?`: `object`\[]; `default?`: `any`; `definitions?`: {\[`key`: `string`]: `object`; }; `dependencies?`: {\[`key`: `string`]: …\[] | {\[`key`: …]: …; \[`key`: …]: …; `$ref?`: …; `$schema?`: …; `additionalItems?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `definitions?`: …; `dependencies?`: …; `description?`: …; `enum?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `id?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; }; }; `description?`: `string`; `discriminator?`: `string`; `enum?`: `any`\[]; `example?`: `any`; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `externalDocs?`: {\[`key`: `string`]: `any`; `description?`: `string`; `url?`: `string`; }; `id?`: `string`; `items?`: {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; `$schema?`: `string`; `additionalItems?`: … | … | …; `additionalProperties?`: … | … | …; `allOf?`: …\[]; `anyOf?`: …\[]; `definitions?`: {\[`key`: …]: …; }; `dependencies?`: {\[`key`: …]: …; }; `description?`: `string`; `enum?`: …\[]; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `id?`: `string`; `items?`: … | …; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: {\[`key`: …]: …; \[`key`: …]: …; `$ref?`: …; `$schema?`: …; `additionalItems?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `definitions?`: …; `dependencies?`: …; `description?`: …; `enum?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `id?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; }; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `required?`: …\[]; `title?`: `string`; `type?`: … | …; `uniqueItems?`: `boolean`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; \[`key`: `number`]: `object`; `[unscopables]?`: {\[`key`: …]: …; `[iterator]?`: …; `[unscopables]?`: …; `at?`: …; `concat?`: …; `copyWithin?`: …; `entries?`: …; `every?`: …; `fill?`: …; `filter?`: …; `find?`: …; `findIndex?`: …; `findLast?`: …; `findLastIndex?`: …; `flat?`: …; `flatMap?`: …; `forEach?`: …; `includes?`: …; `indexOf?`: …; `join?`: …; `keys?`: …; `lastIndexOf?`: …; `length?`: …; `map?`: …; `pop?`: …; `push?`: …; `reduce?`: …; `reduceRight?`: …; `reverse?`: …; `shift?`: …; `slice?`: …; `some?`: …; `sort?`: …; `splice?`: …; `toLocaleString?`: …; `toReversed?`: …; `toSorted?`: …; `toSpliced?`: …; `toString?`: …; `unshift?`: …; `values?`: …; `with?`: …; }; `$ref?`: `string`; `length?`: `number`; `[iterator]?`: `ArrayIterator`<…>; `at?`: `IJsonSchema`; `concat?`: …\[]; `copyWithin?`: `this`; `entries?`: `ArrayIterator`<…>; `every?`: `this is (...)[]`; `fill?`: `this`; `filter?`: …\[]; `find?`: `S`; `findIndex?`: `number`; `findLast?`: `S`; `findLastIndex?`: `number`; `flat?`: …\[]; `flatMap?`: …\[]; `forEach?`: `void`; `includes?`: `boolean`; `indexOf?`: `number`; `join?`: `string`; `keys?`: `ArrayIterator`<…>; `lastIndexOf?`: `number`; `map?`: …\[]; `pop?`: `IJsonSchema`; `push?`: `number`; `reduce?`: `IJsonSchema`; `reduceRight?`: `IJsonSchema`; `reverse?`: …\[]; `shift?`: `IJsonSchema`; `slice?`: …\[]; `some?`: `boolean`; `sort?`: `this`; `splice?`: …\[]; `toLocaleString?`: `string`; `toReversed?`: …\[]; `toSorted?`: …\[]; `toSpliced?`: …\[]; `toString?`: `string`; `unshift?`: `number`; `values?`: `ArrayIterator`<…>; `with?`: …\[]; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; `$schema?`: `string`; `additionalItems?`: … | … | …; `additionalProperties?`: … | … | …; `allOf?`: …\[]; `anyOf?`: …\[]; `collectionFormat?`: `string`; `default?`: `any`; `definitions?`: {\[`key`: …]: …; }; `dependencies?`: {\[`key`: …]: …; }; `description?`: `string`; `enum?`: …\[]; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `format?`: `string`; `id?`: `string`; `items?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; … 22 more …; not?: { …; }; } | { …; } | { …; } | { …; }; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: {\[`key`: …]: …; \[`key`: …]: …; `$ref?`: …; `$schema?`: …; `additionalItems?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `definitions?`: …; `dependencies?`: …; `description?`: …; `enum?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `id?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; }; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `required?`: …\[]; `title?`: `string`; `type?`: … | …; `uniqueItems?`: `boolean`; } | {\[`key`: `number`]: `object`; `[unscopables]?`: {\[`key`: …]: …; `[iterator]?`: …; `[unscopables]?`: …; `at?`: …; `concat?`: …; `copyWithin?`: …; `entries?`: …; `every?`: …; `fill?`: …; `filter?`: …; `find?`: …; `findIndex?`: …; `findLast?`: …; `findLastIndex?`: …; `flat?`: …; `flatMap?`: …; `forEach?`: …; `includes?`: …; `indexOf?`: …; `join?`: …; `keys?`: …; `lastIndexOf?`: …; `length?`: …; `map?`: …; `pop?`: …; `push?`: …; `reduce?`: …; `reduceRight?`: …; `reverse?`: …; `shift?`: …; `slice?`: …; `some?`: …; `sort?`: …; `splice?`: …; `toLocaleString?`: …; `toReversed?`: …; `toSorted?`: …; `toSpliced?`: …; `toString?`: …; `unshift?`: …; `values?`: …; `with?`: …; }; `$ref?`: `string`; `collectionFormat?`: `string`; `default?`: `any`; `enum?`: …\[]; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `format?`: `string`; `items?`: … | …; `length?`: `number`; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `multipleOf?`: `number`; `pattern?`: `string`; `type?`: `string`; `uniqueItems?`: `boolean`; `[iterator]?`: `ArrayIterator`<…>; `at?`: `IJsonSchema`; `concat?`: …\[]; `copyWithin?`: `this`; `entries?`: `ArrayIterator`<…>; `every?`: `this is (...)[]`; `fill?`: `this`; `filter?`: …\[]; `find?`: `S`; `findIndex?`: `number`; `findLast?`: `S`; `findLastIndex?`: `number`; `flat?`: …\[]; `flatMap?`: …\[]; `forEach?`: `void`; `includes?`: `boolean`; `indexOf?`: `number`; `join?`: `string`; `keys?`: `ArrayIterator`<…>; `lastIndexOf?`: `number`; `map?`: …\[]; `pop?`: `IJsonSchema`; `push?`: `number`; `reduce?`: `IJsonSchema`; `reduceRight?`: `IJsonSchema`; `reverse?`: …\[]; `shift?`: `IJsonSchema`; `slice?`: …\[]; `some?`: `boolean`; `sort?`: `this`; `splice?`: …\[]; `toLocaleString?`: `string`; `toReversed?`: …\[]; `toSorted?`: …\[]; `toSpliced?`: …\[]; `toString?`: `string`; `unshift?`: `number`; `values?`: `ArrayIterator`<…>; `with?`: …\[]; }; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; `$schema?`: `string`; `additionalItems?`: `boolean` | { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }; `additionalProperties?`: `boolean` | { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }; `allOf?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }\[]; `anyOf?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }\[]; `definitions?`: {\[`key`: `string`]: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }; }; `dependencies?`: {\[`key`: `string`]: … | …; }; `description?`: `string`; `enum?`: `any`\[]; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `id?`: `string`; `items?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; } | …\[]; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }; `oneOf?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: `string`]: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }; }; `properties?`: {\[`key`: `string`]: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }; }; `required?`: `string`\[]; `title?`: `string`; `type?`: `string` | …\[]; `uniqueItems?`: `boolean`; }; `oneOf?`: `object`\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: `string`]: `object`; }; `properties?`: {\[`key`: `string`]: `object`; }; `readOnly?`: `boolean`; `required?`: `string`\[]; `title?`: `string`; `type?`: `string` | `string`\[]; `uniqueItems?`: `boolean`; `xml?`: {\[`key`: `string`]: `any`; `attribute?`: `boolean`; `name?`: `string`; `namespace?`: `string`; `prefix?`: `string`; `wrapped?`: `boolean`; }; }; }; `default?`: {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; } | {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `description?`: `string`; `examples?`: {\[`key`: `string`]: `any`; }; `headers?`: {\[`key`: `string`]: `object`; }; `schema?`: {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; } | {\[`key`: `string`]: `any`; \[`key`: `` `x-${string}` ``]: `any`; `$ref?`: `string`; `$schema?`: `string`; `additionalItems?`: `boolean` | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; `$schema?`: `string`; `additionalItems?`: boolean | { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; … 23 more …; $ref?: string; }; `additionalProperties?`: boolean | { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; … 23 more …; $ref?: string; }; `allOf?`: …\[]; `anyOf?`: …\[]; `definitions?`: {\[`key`: …]: …; }; `dependencies?`: {\[`key`: …]: …; }; `description?`: `string`; `enum?`: …\[]; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `id?`: `string`; `items?`: … | …; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `required?`: …\[]; `title?`: `string`; `type?`: … | …; `uniqueItems?`: `boolean`; }; `additionalProperties?`: `boolean` | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; `$schema?`: `string`; `additionalItems?`: boolean | { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; … 23 more …; $ref?: string; }; `additionalProperties?`: boolean | { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; … 23 more …; $ref?: string; }; `allOf?`: …\[]; `anyOf?`: …\[]; `definitions?`: {\[`key`: …]: …; }; `dependencies?`: {\[`key`: …]: …; }; `description?`: `string`; `enum?`: …\[]; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `id?`: `string`; `items?`: … | …; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `required?`: …\[]; `title?`: `string`; `type?`: … | …; `uniqueItems?`: `boolean`; }; `allOf?`: `object`\[]; `anyOf?`: `object`\[]; `default?`: `any`; `definitions?`: {\[`key`: `string`]: `object`; }; `dependencies?`: {\[`key`: `string`]: …\[] | {\[`key`: …]: …; \[`key`: …]: …; `$ref?`: …; `$schema?`: …; `additionalItems?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `definitions?`: …; `dependencies?`: …; `description?`: …; `enum?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `id?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; }; }; `description?`: `string`; `discriminator?`: `string`; `enum?`: `any`\[]; `example?`: `any`; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `externalDocs?`: {\[`key`: `string`]: `any`; `description?`: `string`; `url?`: `string`; }; `id?`: `string`; `items?`: {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; `$schema?`: `string`; `additionalItems?`: … | … | …; `additionalProperties?`: … | … | …; `allOf?`: …\[]; `anyOf?`: …\[]; `definitions?`: {\[`key`: …]: …; }; `dependencies?`: {\[`key`: …]: …; }; `description?`: `string`; `enum?`: …\[]; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `id?`: `string`; `items?`: … | …; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: {\[`key`: …]: …; \[`key`: …]: …; `$ref?`: …; `$schema?`: …; `additionalItems?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `definitions?`: …; `dependencies?`: …; `description?`: …; `enum?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `id?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; }; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `required?`: …\[]; `title?`: `string`; `type?`: … | …; `uniqueItems?`: `boolean`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; \[`key`: `number`]: `object`; `[unscopables]?`: {\[`key`: …]: …; `[iterator]?`: …; `[unscopables]?`: …; `at?`: …; `concat?`: …; `copyWithin?`: …; `entries?`: …; `every?`: …; `fill?`: …; `filter?`: …; `find?`: …; `findIndex?`: …; `findLast?`: …; `findLastIndex?`: …; `flat?`: …; `flatMap?`: …; `forEach?`: …; `includes?`: …; `indexOf?`: …; `join?`: …; `keys?`: …; `lastIndexOf?`: …; `length?`: …; `map?`: …; `pop?`: …; `push?`: …; `reduce?`: …; `reduceRight?`: …; `reverse?`: …; `shift?`: …; `slice?`: …; `some?`: …; `sort?`: …; `splice?`: …; `toLocaleString?`: …; `toReversed?`: …; `toSorted?`: …; `toSpliced?`: …; `toString?`: …; `unshift?`: …; `values?`: …; `with?`: …; }; `$ref?`: `string`; `length?`: `number`; `[iterator]?`: `ArrayIterator`<…>; `at?`: `IJsonSchema`; `concat?`: …\[]; `copyWithin?`: `this`; `entries?`: `ArrayIterator`<…>; `every?`: `this is (...)[]`; `fill?`: `this`; `filter?`: …\[]; `find?`: `S`; `findIndex?`: `number`; `findLast?`: `S`; `findLastIndex?`: `number`; `flat?`: …\[]; `flatMap?`: …\[]; `forEach?`: `void`; `includes?`: `boolean`; `indexOf?`: `number`; `join?`: `string`; `keys?`: `ArrayIterator`<…>; `lastIndexOf?`: `number`; `map?`: …\[]; `pop?`: `IJsonSchema`; `push?`: `number`; `reduce?`: `IJsonSchema`; `reduceRight?`: `IJsonSchema`; `reverse?`: …\[]; `shift?`: `IJsonSchema`; `slice?`: …\[]; `some?`: `boolean`; `sort?`: `this`; `splice?`: …\[]; `toLocaleString?`: `string`; `toReversed?`: …\[]; `toSorted?`: …\[]; `toSpliced?`: …\[]; `toString?`: `string`; `unshift?`: `number`; `values?`: `ArrayIterator`<…>; `with?`: …\[]; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; `$schema?`: `string`; `additionalItems?`: … | … | …; `additionalProperties?`: … | … | …; `allOf?`: …\[]; `anyOf?`: …\[]; `collectionFormat?`: `string`; `default?`: `any`; `definitions?`: {\[`key`: …]: …; }; `dependencies?`: {\[`key`: …]: …; }; `description?`: `string`; `enum?`: …\[]; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `format?`: `string`; `id?`: `string`; `items?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; … 22 more …; not?: { …; }; } | { …; } | { …; } | { …; }; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: {\[`key`: …]: …; \[`key`: …]: …; `$ref?`: …; `$schema?`: …; `additionalItems?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `definitions?`: …; `dependencies?`: …; `description?`: …; `enum?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `id?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; }; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `required?`: …\[]; `title?`: `string`; `type?`: … | …; `uniqueItems?`: `boolean`; } | {\[`key`: `number`]: `object`; `[unscopables]?`: {\[`key`: …]: …; `[iterator]?`: …; `[unscopables]?`: …; `at?`: …; `concat?`: …; `copyWithin?`: …; `entries?`: …; `every?`: …; `fill?`: …; `filter?`: …; `find?`: …; `findIndex?`: …; `findLast?`: …; `findLastIndex?`: …; `flat?`: …; `flatMap?`: …; `forEach?`: …; `includes?`: …; `indexOf?`: …; `join?`: …; `keys?`: …; `lastIndexOf?`: …; `length?`: …; `map?`: …; `pop?`: …; `push?`: …; `reduce?`: …; `reduceRight?`: …; `reverse?`: …; `shift?`: …; `slice?`: …; `some?`: …; `sort?`: …; `splice?`: …; `toLocaleString?`: …; `toReversed?`: …; `toSorted?`: …; `toSpliced?`: …; `toString?`: …; `unshift?`: …; `values?`: …; `with?`: …; }; `$ref?`: `string`; `collectionFormat?`: `string`; `default?`: `any`; `enum?`: …\[]; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `format?`: `string`; `items?`: … | …; `length?`: `number`; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `multipleOf?`: `number`; `pattern?`: `string`; `type?`: `string`; `uniqueItems?`: `boolean`; `[iterator]?`: `ArrayIterator`<…>; `at?`: `IJsonSchema`; `concat?`: …\[]; `copyWithin?`: `this`; `entries?`: `ArrayIterator`<…>; `every?`: `this is (...)[]`; `fill?`: `this`; `filter?`: …\[]; `find?`: `S`; `findIndex?`: `number`; `findLast?`: `S`; `findLastIndex?`: `number`; `flat?`: …\[]; `flatMap?`: …\[]; `forEach?`: `void`; `includes?`: `boolean`; `indexOf?`: `number`; `join?`: `string`; `keys?`: `ArrayIterator`<…>; `lastIndexOf?`: `number`; `map?`: …\[]; `pop?`: `IJsonSchema`; `push?`: `number`; `reduce?`: `IJsonSchema`; `reduceRight?`: `IJsonSchema`; `reverse?`: …\[]; `shift?`: `IJsonSchema`; `slice?`: …\[]; `some?`: `boolean`; `sort?`: `this`; `splice?`: …\[]; `toLocaleString?`: `string`; `toReversed?`: …\[]; `toSorted?`: …\[]; `toSpliced?`: …\[]; `toString?`: `string`; `unshift?`: `number`; `values?`: `ArrayIterator`<…>; `with?`: …\[]; }; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; `$schema?`: `string`; `additionalItems?`: `boolean` | { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }; `additionalProperties?`: `boolean` | { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }; `allOf?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }\[]; `anyOf?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }\[]; `definitions?`: {\[`key`: `string`]: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }; }; `dependencies?`: {\[`key`: `string`]: … | …; }; `description?`: `string`; `enum?`: `any`\[]; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `id?`: `string`; `items?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; } | …\[]; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }; `oneOf?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: `string`]: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }; }; `properties?`: {\[`key`: `string`]: { \[x: \`x-${string}\`]: any; \[x: string]: any; id?: string; $schema?: string; title?: string; description?: string; multipleOf?: number; maximum?: number; exclusiveMaximum?: boolean; minimum?: number; exclusiveMinimum?: boolean; … 22 more …; $ref?: string; }; }; `required?`: `string`\[]; `title?`: `string`; `type?`: `string` | …\[]; `uniqueItems?`: `boolean`; }; `oneOf?`: `object`\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: `string`]: `object`; }; `properties?`: {\[`key`: `string`]: `object`; }; `readOnly?`: `boolean`; `required?`: `string`\[]; `title?`: `string`; `type?`: `string` | `string`\[]; `uniqueItems?`: `boolean`; `xml?`: {\[`key`: `string`]: `any`; `attribute?`: `boolean`; `name?`: `string`; `namespace?`: `string`; `prefix?`: `string`; `wrapped?`: `boolean`; }; }; }; }; `schemes?`: `string`\[]; `security?`: `object`\[]; `summary?`: `string`; `tags?`: `string`\[]; } | {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `callbacks?`: {\[`key`: `string`]: {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; } | {\[`key`: `string`]: `object`; }; }; `deprecated?`: `boolean`; `description?`: `string`; `externalDocs?`: { `description?`: `string`; `url?`: `string`; }; `operationId?`: `string`; `parameters?`: ({\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; } | { `allowEmptyValue?`: `boolean`; `allowReserved?`: `boolean`; `content?`: {\[`key`: `string`]: `object`; }; `deprecated?`: `boolean`; `description?`: `string`; `example?`: `any`; `examples?`: {\[`key`: `string`]: {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; } | { `description?`: `string`; `externalValue?`: `string`; `summary?`: `string`; `value?`: `any`; }; }; `explode?`: `boolean`; `in?`: `ParameterLocation`; `name?`: `string`; `required?`: `boolean`; `schema?`: {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; } | {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `additionalProperties?`: `boolean` | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: NonArraySchemaObjectType; … 33 more …; deprecated?: boolean; }; … 33 more …; deprecated?: boolean; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `additionalProperties?`: boolean | { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; …; `allOf?`: …\[]; `anyOf?`: …\[]; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…; `nullable?`: `boolean`; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: `NonArraySchemaObjectType`; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `attribute?`: …; `name?`: …; `namespace?`: …; `prefix?`: …; `wrapped?`: …; }; }; `allOf?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…\[]; `anyOf?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…\[]; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `mapping?`: {\[`key`: `string`]: `string`; }; `propertyName?`: `string`; }; `enum?`: `any`\[]; `example?`: `any`; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `externalDocs?`: { `description?`: `string`; `url?`: `string`; }; `format?`: `string`; `items?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…; `nullable?`: `boolean`; `oneOf?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: `string`]: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…; }; `properties?`: {\[`key`: `string`]: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…; }; `readOnly?`: `boolean`; `required?`: `string`\[]; `title?`: `string`; `type?`: `"array"`; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `attribute?`: `boolean`; `name?`: `string`; `namespace?`: `string`; `prefix?`: `string`; `wrapped?`: `boolean`; }; } | {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `additionalProperties?`: `boolean` | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `additionalProperties?`: boolean | { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; …; `allOf?`: …\[]; `anyOf?`: …\[]; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `items?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…; `nullable?`: `boolean`; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: `"array"`; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `attribute?`: …; `name?`: …; `namespace?`: …; `prefix?`: …; `wrapped?`: …; }; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: NonArraySchemaObjectType; title?: string; description?: string; format?: string; default?: any; multipleOf?: number; maximum?: number; … 27 more …; deprecated?: boolean; }; `allOf?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…\[]; `anyOf?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…\[]; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `mapping?`: {\[`key`: `string`]: `string`; }; `propertyName?`: `string`; }; `enum?`: `any`\[]; `example?`: `any`; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `externalDocs?`: { `description?`: `string`; `url?`: `string`; }; `format?`: `string`; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…; `nullable?`: `boolean`; `oneOf?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: `string`]: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…; }; `properties?`: {\[`key`: `string`]: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…; }; `readOnly?`: `boolean`; `required?`: `string`\[]; `title?`: `string`; `type?`: `NonArraySchemaObjectType`; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `attribute?`: `boolean`; `name?`: `string`; `namespace?`: `string`; `prefix?`: `string`; `wrapped?`: `boolean`; }; }; `style?`: `ParameterStyle`; })\[]; `requestBody?`: {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; } | { `content?`: {\[`key`: `string`]: `object`; }; `description?`: `string`; `required?`: `boolean`; }; `responses?`: {\[`key`: `string`]: {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; } | {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `content?`: {\[`key`: `string`]: `object`; }; `description?`: `string`; `headers?`: {\[`key`: `string`]: {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; } | { `allowEmptyValue?`: `boolean`; `allowReserved?`: `boolean`; `content?`: {\[`key`: `string`]: `object`; }; `deprecated?`: `boolean`; `description?`: `string`; `example?`: `any`; `examples?`: {\[`key`: `string`]: … | …; }; `explode?`: `boolean`; `required?`: `boolean`; `schema?`: {\[`key`: …]: …; \[`key`: …]: …; `$ref?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `nullable?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `nullable?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; }; `style?`: `ParameterStyle`; }; }; `links?`: {\[`key`: `string`]: {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; } | { `description?`: `string`; `operationId?`: `string`; `operationRef?`: `string`; `parameters?`: {\[`key`: `string`]: `any`; }; `requestBody?`: `any`; `server?`: { `description?`: `string`; `url?`: `string`; `variables?`: {\[`key`: …]: …; }; }; }; }; }; }; `security?`: `object`\[]; `servers?`: `object`\[]; `summary?`: `string`; `tags?`: `string`\[]; } | {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `callbacks?`: {\[`key`: `string`]: {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `description?`: `string`; `summary?`: `string`; } | {\[`key`: `string`]: {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `description?`: `string`; `summary?`: `string`; } | {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `delete?`: { \[x: string]: any; \[x: number]: any; parameters?: ({ name?: string; in?: ParameterLocation; description?: string; required?: boolean; deprecated?: boolean; allowEmptyValue?: boolean; … 6 more …; content?: { …; }; } | { …; })\[]; requestBody?: { …; } | { …; }; responses?: { …; }; callbacks?: { …; }; s…; `get?`: { \[x: string]: any; \[x: number]: any; parameters?: ({ name?: string; in?: ParameterLocation; description?: string; required?: boolean; deprecated?: boolean; allowEmptyValue?: boolean; … 6 more …; content?: { …; }; } | { …; })\[]; requestBody?: { …; } | { …; }; responses?: { …; }; callbacks?: { …; }; s…; `head?`: { \[x: string]: any; \[x: number]: any; parameters?: ({ name?: string; in?: ParameterLocation; description?: string; required?: boolean; deprecated?: boolean; allowEmptyValue?: boolean; … 6 more …; content?: { …; }; } | { …; })\[]; requestBody?: { …; } | { …; }; responses?: { …; }; callbacks?: { …; }; s…; `options?`: { \[x: string]: any; \[x: number]: any; parameters?: ({ name?: string; in?: ParameterLocation; description?: string; required?: boolean; deprecated?: boolean; allowEmptyValue?: boolean; … 6 more …; content?: { …; }; } | { …; })\[]; requestBody?: { …; } | { …; }; responses?: { …; }; callbacks?: { …; }; s…; `parameters?`: ({ `allowEmptyValue?`: …; `allowReserved?`: …; `content?`: …; `deprecated?`: …; `description?`: …; `example?`: …; `examples?`: …; `explode?`: …; `in?`: …; `name?`: …; `required?`: …; `schema?`: …; `style?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `description?`: …; `summary?`: …; })\[]; `patch?`: { \[x: string]: any; \[x: number]: any; parameters?: ({ name?: string; in?: ParameterLocation; description?: string; required?: boolean; deprecated?: boolean; allowEmptyValue?: boolean; … 6 more …; content?: { …; }; } | { …; })\[]; requestBody?: { …; } | { …; }; responses?: { …; }; callbacks?: { …; }; s…; `post?`: { \[x: string]: any; \[x: number]: any; parameters?: ({ name?: string; in?: ParameterLocation; description?: string; required?: boolean; deprecated?: boolean; allowEmptyValue?: boolean; … 6 more …; content?: { …; }; } | { …; })\[]; requestBody?: { …; } | { …; }; responses?: { …; }; callbacks?: { …; }; s…; `put?`: { \[x: string]: any; \[x: number]: any; parameters?: ({ name?: string; in?: ParameterLocation; description?: string; required?: boolean; deprecated?: boolean; allowEmptyValue?: boolean; … 6 more …; content?: { …; }; } | { …; })\[]; requestBody?: { …; } | { …; }; responses?: { …; }; callbacks?: { …; }; s…; `servers?`: `object`\[]; `trace?`: { \[x: string]: any; \[x: number]: any; parameters?: ({ name?: string; in?: ParameterLocation; description?: string; required?: boolean; deprecated?: boolean; allowEmptyValue?: boolean; … 6 more …; content?: { …; }; } | { …; })\[]; requestBody?: { …; } | { …; }; responses?: { …; }; callbacks?: { …; }; s…; }; }; }; `parameters?`: ({ `allowEmptyValue?`: `boolean`; `allowReserved?`: `boolean`; `content?`: {\[`key`: `string`]: `object`; }; `deprecated?`: `boolean`; `description?`: `string`; `example?`: `any`; `examples?`: {\[`key`: `string`]: {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; } | { `description?`: `string`; `externalValue?`: `string`; `summary?`: `string`; `value?`: `any`; }; }; `explode?`: `boolean`; `in?`: `ParameterLocation`; `name?`: `string`; `required?`: `boolean`; `schema?`: {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; } | {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `additionalProperties?`: `boolean` | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: NonArraySchemaObjectType; … 33 more …; deprecated?: boolean; }; … 33 more …; deprecated?: boolean; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `additionalProperties?`: boolean | { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; …; `allOf?`: …\[]; `anyOf?`: …\[]; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…; `nullable?`: `boolean`; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: `NonArraySchemaObjectType`; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `attribute?`: …; `name?`: …; `namespace?`: …; `prefix?`: …; `wrapped?`: …; }; }; `allOf?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…\[]; `anyOf?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…\[]; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `mapping?`: {\[`key`: `string`]: `string`; }; `propertyName?`: `string`; }; `enum?`: `any`\[]; `example?`: `any`; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `externalDocs?`: { `description?`: `string`; `url?`: `string`; }; `format?`: `string`; `items?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…; `nullable?`: `boolean`; `oneOf?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: `string`]: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…; }; `properties?`: {\[`key`: `string`]: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…; }; `readOnly?`: `boolean`; `required?`: `string`\[]; `title?`: `string`; `type?`: `"array"`; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `attribute?`: `boolean`; `name?`: `string`; `namespace?`: `string`; `prefix?`: `string`; `wrapped?`: `boolean`; }; } | {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `additionalProperties?`: `boolean` | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$ref?`: `string`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `additionalProperties?`: boolean | { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; …; `allOf?`: …\[]; `anyOf?`: …\[]; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `items?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…; `nullable?`: `boolean`; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: `"array"`; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `attribute?`: …; `name?`: …; `namespace?`: …; `prefix?`: …; `wrapped?`: …; }; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: NonArraySchemaObjectType; title?: string; description?: string; format?: string; default?: any; multipleOf?: number; maximum?: number; … 27 more …; deprecated?: boolean; }; `allOf?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…\[]; `anyOf?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…\[]; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `mapping?`: {\[`key`: `string`]: `string`; }; `propertyName?`: `string`; }; `enum?`: `any`\[]; `example?`: `any`; `exclusiveMaximum?`: `boolean`; `exclusiveMinimum?`: `boolean`; `externalDocs?`: { `description?`: `string`; `url?`: `string`; }; `format?`: `string`; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…; `nullable?`: `boolean`; `oneOf?`: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: `string`]: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…; }; `properties?`: {\[`key`: `string`]: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; type?: “array”; items?: { \[x: \`x-${string}\`]: any; \[x: string]: any; $ref?: string; } | … | { \[x: \`x-${string}\`]: any; \[x: string]: any; … 34 more …; deprecated?: boolean; }; … 33 more …; deprecated…; }; `readOnly?`: `boolean`; `required?`: `string`\[]; `title?`: `string`; `type?`: `NonArraySchemaObjectType`; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `attribute?`: `boolean`; `name?`: `string`; `namespace?`: `string`; `prefix?`: `string`; `wrapped?`: `boolean`; }; }; `style?`: `ParameterStyle`; } | {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `description?`: `string`; `summary?`: `string`; })\[]; `requestBody?`: {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `description?`: `string`; `summary?`: `string`; } | { `content?`: {\[`key`: `string`]: `object`; }; `description?`: `string`; `required?`: `boolean`; }; `responses?`: {\[`key`: `string`]: {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `description?`: `string`; `summary?`: `string`; } | {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `content?`: {\[`key`: `string`]: `object`; }; `headers?`: {\[`key`: `string`]: {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `description?`: `string`; `summary?`: `string`; } | { `allowEmptyValue?`: `boolean`; `allowReserved?`: `boolean`; `content?`: {\[`key`: `string`]: `object`; }; `deprecated?`: `boolean`; `description?`: `string`; `example?`: `any`; `examples?`: {\[`key`: `string`]: … | …; }; `explode?`: `boolean`; `required?`: `boolean`; `schema?`: {\[`key`: …]: …; \[`key`: …]: …; `$ref?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `nullable?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `nullable?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; }; `style?`: `ParameterStyle`; }; }; `links?`: {\[`key`: `string`]: {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `description?`: `string`; `summary?`: `string`; } | { `description?`: `string`; `operationId?`: `string`; `operationRef?`: `string`; `parameters?`: {\[`key`: `string`]: `any`; }; `requestBody?`: `any`; `server?`: { `description?`: `string`; `url?`: `string`; `variables?`: {\[`key`: …]: …; }; }; }; }; }; }; `servers?`: `object`\[]; } | {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `callbacks?`: {\[`key`: `string`]: {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `description?`: `string`; `summary?`: `string`; } | {\[`key`: `string`]: {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `description?`: `string`; `summary?`: `string`; } | {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `additionalOperations?`: {\[`key`: `string`]: { \[x: string]: any; \[x: number]: any; parameters?: ({ \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { description?: string; deprecated?: boolean; content?: { \[x: string]: { schema?: { …; } | … 1 more … | { …; }; example?: any; examples?: { …; }; encoding?: { …; }; }; }; …; }; `delete?`: { \[x: string]: any; \[x: number]: any; parameters?: ({ \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { description?: string; deprecated?: boolean; content?: { \[x: string]: { schema?: { …; } | … 1 more … | { …; }; example?: any; examples?: { …; }; encoding?: { …; }; }; }; …; `get?`: { \[x: string]: any; \[x: number]: any; parameters?: ({ \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { description?: string; deprecated?: boolean; content?: { \[x: string]: { schema?: { …; } | … 1 more … | { …; }; example?: any; examples?: { …; }; encoding?: { …; }; }; }; …; `head?`: { \[x: string]: any; \[x: number]: any; parameters?: ({ \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { description?: string; deprecated?: boolean; content?: { \[x: string]: { schema?: { …; } | … 1 more … | { …; }; example?: any; examples?: { …; }; encoding?: { …; }; }; }; …; `options?`: { \[x: string]: any; \[x: number]: any; parameters?: ({ \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { description?: string; deprecated?: boolean; content?: { \[x: string]: { schema?: { …; } | … 1 more … | { …; }; example?: any; examples?: { …; }; encoding?: { …; }; }; }; …; `parameters?`: ({\[`key`: …]: …; \[`key`: …]: …; `description?`: …; `summary?`: …; } | { `allowEmptyValue?`: …; `allowReserved?`: …; `content?`: …; `deprecated?`: …; `description?`: …; `example?`: …; `examples?`: …; `explode?`: …; `in?`: …; `name?`: …; `required?`: …; `schema?`: …; `style?`: …; })\[]; `patch?`: { \[x: string]: any; \[x: number]: any; parameters?: ({ \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { description?: string; deprecated?: boolean; content?: { \[x: string]: { schema?: { …; } | … 1 more … | { …; }; example?: any; examples?: { …; }; encoding?: { …; }; }; }; …; `post?`: { \[x: string]: any; \[x: number]: any; parameters?: ({ \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { description?: string; deprecated?: boolean; content?: { \[x: string]: { schema?: { …; } | … 1 more … | { …; }; example?: any; examples?: { …; }; encoding?: { …; }; }; }; …; `put?`: { \[x: string]: any; \[x: number]: any; parameters?: ({ \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { description?: string; deprecated?: boolean; content?: { \[x: string]: { schema?: { …; } | … 1 more … | { …; }; example?: any; examples?: { …; }; encoding?: { …; }; }; }; …; `query?`: { \[x: string]: any; \[x: number]: any; parameters?: ({ \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { description?: string; deprecated?: boolean; content?: { \[x: string]: { schema?: { …; } | … 1 more … | { …; }; example?: any; examples?: { …; }; encoding?: { …; }; }; }; …; `trace?`: { \[x: string]: any; \[x: number]: any; parameters?: ({ \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { description?: string; deprecated?: boolean; content?: { \[x: string]: { schema?: { …; } | … 1 more … | { …; }; example?: any; examples?: { …; }; encoding?: { …; }; }; }; …; }; }; }; `parameters?`: ({\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `description?`: `string`; `summary?`: `string`; } | { `allowEmptyValue?`: `boolean`; `allowReserved?`: `boolean`; `content?`: {\[`key`: `string`]: `object`; }; `deprecated?`: `boolean`; `description?`: `string`; `example?`: `any`; `examples?`: {\[`key`: `string`]: {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `description?`: `string`; `summary?`: `string`; } | { `dataValue?`: `any`; `description?`: `string`; `externalValue?`: `string`; `serializedValue?`: `string`; `summary?`: `string`; `value?`: `any`; }; }; `explode?`: `boolean`; `in?`: `ParameterLocation`; `name?`: `string`; `required?`: `boolean`; `schema?`: {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `description?`: `string`; `summary?`: `string`; } | {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `valueOf?`: `boolean`; } | {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `valueOf?`: `boolean`; } | {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: `boolean` | {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `description?`: `string`; `summary?`: `string`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `valueOf?`: `boolean`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `valueOf?`: `boolean`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: boolean | { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `allOf?`: …\[]; `anyOf?`: …\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `examples?`: …\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `items?`: … | … | … | … | … | …; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: … | … | … | … | … | …; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: `"array"`; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `attribute?`: …; `name?`: …; `namespace?`: …; `prefix?`: …; `wrapped?`: …; }; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: boolean | { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `allOf?`: …\[]; `anyOf?`: …\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `examples?`: …\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: … | … | … | … | … | …; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: `NonArraySchemaObjectType`; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `attribute?`: …; `name?`: …; `namespace?`: …; `prefix?`: …; `wrapped?`: …; }; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: boolean | { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `allOf?`: …\[]; `anyOf?`: …\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `examples?`: …\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `items?`: … | … | … | … | … | …; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: … | … | … | … | … | …; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: …\[]; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `attribute?`: …; `name?`: …; `namespace?`: …; `prefix?`: …; `wrapped?`: …; }; }; `allOf?`: ({\[`key`: …]: …; \[`key`: …]: …; `description?`: …; `summary?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; })\[]; `anyOf?`: ({\[`key`: …]: …; \[`key`: …]: …; `description?`: …; `summary?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; })\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `defaultMapping?`: `string`; `mapping?`: {\[`key`: `string`]: `string`; }; `propertyName?`: `string`; }; `enum?`: `any`\[]; `example?`: `any`; `examples?`: `object`\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: `string`; `url?`: `string`; }; `format?`: `string`; `items?`: { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `description?`: `string`; `summary?`: `string`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `valueOf?`: `boolean`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `valueOf?`: `boolean`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: … | … | … | … | … | … | … | …; `allOf?`: …\[]; `anyOf?`: …\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `examples?`: …\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `items?`: { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: `"array"`; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `attribute?`: …; `name?`: …; `namespace?`: …; `prefix?`: …; `wrapped?`: …; }; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: … | … | … | … | … | … | … | …; `allOf?`: …\[]; `anyOf?`: …\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `examples?`: …\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: `NonArraySchemaObjectType`; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `attribute?`: …; `name?`: …; `namespace?`: …; `prefix?`: …; `wrapped?`: …; }; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: … | … | … | … | … | … | … | …; `allOf?`: …\[]; `anyOf?`: …\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `examples?`: …\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `items?`: { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: …\[]; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `attribute?`: …; `name?`: …; `namespace?`: …; `prefix?`: …; `wrapped?`: …; }; }; `oneOf?`: ({\[`key`: …]: …; \[`key`: …]: …; `description?`: …; `summary?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; })\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: `string`]: {\[`key`: …]: …; \[`key`: …]: …; `description?`: …; `summary?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; }; }; `properties?`: {\[`key`: `string`]: {\[`key`: …]: …; \[`key`: …]: …; `description?`: …; `summary?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; }; }; `readOnly?`: `boolean`; `required?`: `string`\[]; `title?`: `string`; `type?`: `"array"`; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `name?`: `string`; `namespace?`: `string`; `nodeType?`: `XMLNodeType`; `prefix?`: `string`; }; } | {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: `boolean` | {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `description?`: `string`; `summary?`: `string`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `valueOf?`: `boolean`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `valueOf?`: `boolean`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: boolean | { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `allOf?`: …\[]; `anyOf?`: …\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `examples?`: …\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `items?`: … | … | … | … | … | …; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: … | … | … | … | … | …; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: `"array"`; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `attribute?`: …; `name?`: …; `namespace?`: …; `prefix?`: …; `wrapped?`: …; }; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: boolean | { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `allOf?`: …\[]; `anyOf?`: …\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `examples?`: …\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: … | … | … | … | … | …; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: `NonArraySchemaObjectType`; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `attribute?`: …; `name?`: …; `namespace?`: …; `prefix?`: …; `wrapped?`: …; }; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: boolean | { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `allOf?`: …\[]; `anyOf?`: …\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `examples?`: …\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `items?`: … | … | … | … | … | …; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: … | … | … | … | … | …; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: …\[]; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `attribute?`: …; `name?`: …; `namespace?`: …; `prefix?`: …; `wrapped?`: …; }; }; `allOf?`: ({\[`key`: …]: …; \[`key`: …]: …; `description?`: …; `summary?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; })\[]; `anyOf?`: ({\[`key`: …]: …; \[`key`: …]: …; `description?`: …; `summary?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; })\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `defaultMapping?`: `string`; `mapping?`: {\[`key`: `string`]: `string`; }; `propertyName?`: `string`; }; `enum?`: `any`\[]; `example?`: `any`; `examples?`: `object`\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: `string`; `url?`: `string`; }; `format?`: `string`; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `description?`: `string`; `summary?`: `string`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `valueOf?`: `boolean`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `valueOf?`: `boolean`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: … | … | … | … | … | … | … | …; `allOf?`: …\[]; `anyOf?`: …\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `examples?`: …\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `items?`: { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: `"array"`; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `attribute?`: …; `name?`: …; `namespace?`: …; `prefix?`: …; `wrapped?`: …; }; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: … | … | … | … | … | … | … | …; `allOf?`: …\[]; `anyOf?`: …\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `examples?`: …\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: `NonArraySchemaObjectType`; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `attribute?`: …; `name?`: …; `namespace?`: …; `prefix?`: …; `wrapped?`: …; }; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: … | … | … | … | … | … | … | …; `allOf?`: …\[]; `anyOf?`: …\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `examples?`: …\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `items?`: { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: …\[]; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `attribute?`: …; `name?`: …; `namespace?`: …; `prefix?`: …; `wrapped?`: …; }; }; `oneOf?`: ({\[`key`: …]: …; \[`key`: …]: …; `description?`: …; `summary?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; })\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: `string`]: {\[`key`: …]: …; \[`key`: …]: …; `description?`: …; `summary?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; }; }; `properties?`: {\[`key`: `string`]: {\[`key`: …]: …; \[`key`: …]: …; `description?`: …; `summary?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; }; }; `readOnly?`: `boolean`; `required?`: `string`\[]; `title?`: `string`; `type?`: `NonArraySchemaObjectType`; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `name?`: `string`; `namespace?`: `string`; `nodeType?`: `XMLNodeType`; `prefix?`: `string`; }; } | {\[`key`: `` `x-${string}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: `boolean` | {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `description?`: `string`; `summary?`: `string`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `valueOf?`: `boolean`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `valueOf?`: `boolean`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: boolean | { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `allOf?`: …\[]; `anyOf?`: …\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `examples?`: …\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `items?`: … | … | … | … | … | …; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: … | … | … | … | … | …; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: `"array"`; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `attribute?`: …; `name?`: …; `namespace?`: …; `prefix?`: …; `wrapped?`: …; }; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: boolean | { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `allOf?`: …\[]; `anyOf?`: …\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `examples?`: …\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: … | … | … | … | … | …; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: `NonArraySchemaObjectType`; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `attribute?`: …; `name?`: …; `namespace?`: …; `prefix?`: …; `wrapped?`: …; }; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: boolean | { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `allOf?`: …\[]; `anyOf?`: …\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `examples?`: …\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `items?`: … | … | … | … | … | …; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: … | … | … | … | … | …; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: …\[]; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `attribute?`: …; `name?`: …; `namespace?`: …; `prefix?`: …; `wrapped?`: …; }; }; `allOf?`: ({\[`key`: …]: …; \[`key`: …]: …; `description?`: …; `summary?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; })\[]; `anyOf?`: ({\[`key`: …]: …; \[`key`: …]: …; `description?`: …; `summary?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; })\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `defaultMapping?`: `string`; `mapping?`: {\[`key`: `string`]: `string`; }; `propertyName?`: `string`; }; `enum?`: `any`\[]; `example?`: `any`; `examples?`: `object`\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: `string`; `url?`: `string`; }; `format?`: `string`; `items?`: { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `description?`: `string`; `summary?`: `string`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `valueOf?`: `boolean`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `valueOf?`: `boolean`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: … | … | … | … | … | … | … | …; `allOf?`: …\[]; `anyOf?`: …\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `examples?`: …\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `items?`: { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: `"array"`; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `attribute?`: …; `name?`: …; `namespace?`: …; `prefix?`: …; `wrapped?`: …; }; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: … | … | … | … | … | … | … | …; `allOf?`: …\[]; `anyOf?`: …\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `examples?`: …\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: `NonArraySchemaObjectType`; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `attribute?`: …; `name?`: …; `namespace?`: …; `prefix?`: …; `wrapped?`: …; }; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: … | … | … | … | … | … | … | …; `allOf?`: …\[]; `anyOf?`: …\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `examples?`: …\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `items?`: { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: …\[]; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `attribute?`: …; `name?`: …; `namespace?`: …; `prefix?`: …; `wrapped?`: …; }; }; `oneOf?`: ({\[`key`: …]: …; \[`key`: …]: …; `description?`: …; `summary?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; })\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: `string`]: {\[`key`: …]: …; \[`key`: …]: …; `description?`: …; `summary?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; }; }; `properties?`: {\[`key`: `string`]: {\[`key`: …]: …; \[`key`: …]: …; `description?`: …; `summary?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; }; }; `readOnly?`: `boolean`; `required?`: `string`\[]; `title?`: `string`; `type?`: (`"array"` | `NonArraySchemaObjectType`)\[]; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `name?`: `string`; `namespace?`: `string`; `nodeType?`: `XMLNodeType`; `prefix?`: `string`; }; }; `style?`: `ParameterStyle`; })\[]; `requestBody?`: {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `description?`: `string`; `summary?`: `string`; } | { `content?`: {\[`key`: `string`]: {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `description?`: `string`; `summary?`: `string`; } | { `encoding?`: {\[`key`: `string`]: `object`; }; `example?`: `any`; `examples?`: {\[`key`: `string`]: {\[`key`: …]: …; \[`key`: …]: …; `description?`: …; `summary?`: …; } | { `dataValue?`: …; `description?`: …; `externalValue?`: …; `serializedValue?`: …; `summary?`: …; `value?`: …; }; }; `itemEncoding?`: { `allowReserved?`: `boolean`; `contentType?`: `string`; `encoding?`: {\[`key`: `string`]: { style?: string; explode?: boolean; allowReserved?: boolean; contentType?: string; headers?: { \[x: string]: { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { description?: string; … 9 more …; schema?: { …; } | … 4 more … | { …; }; }; }; encoding?: { …; }; prefixEncodi…; }; `explode?`: `boolean`; `headers?`: {\[`key`: `string`]: … | …; }; `itemEncoding?`: { style?: string; explode?: boolean; allowReserved?: boolean; contentType?: string; headers?: { \[x: string]: { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { description?: string; … 9 more …; schema?: { …; } | … 4 more … | { …; }; }; }; encoding?: { …; }; prefixEncodi…; `prefixEncoding?`: { style?: string; explode?: boolean; allowReserved?: boolean; contentType?: string; headers?: { \[x: string]: { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { description?: string; … 9 more …; schema?: { …; } | … 4 more … | { …; }; }; }; encoding?: { …; }; prefixEncodi…\[]; `style?`: `string`; }; `itemSchema?`: {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `description?`: `string`; `summary?`: `string`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `valueOf?`: `boolean`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `valueOf?`: `boolean`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: … | … | … | … | … | … | … | …; `allOf?`: …\[]; `anyOf?`: …\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `defaultMapping?`: …; `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `examples?`: …\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `items?`: { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: … | … | … | … | … | …; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: `"array"`; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `name?`: …; `namespace?`: …; `nodeType?`: …; `prefix?`: …; }; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: … | … | … | … | … | … | … | …; `allOf?`: …\[]; `anyOf?`: …\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `defaultMapping?`: …; `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `examples?`: …\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: … | … | … | … | … | …; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: `NonArraySchemaObjectType`; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `name?`: …; `namespace?`: …; `nodeType?`: …; `prefix?`: …; }; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: … | … | … | … | … | … | … | …; `allOf?`: …\[]; `anyOf?`: …\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `defaultMapping?`: …; `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `examples?`: …\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `items?`: { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: … | … | … | … | … | …; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: …\[]; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `name?`: …; `namespace?`: …; `nodeType?`: …; `prefix?`: …; }; }; `prefixEncoding?`: `object`\[]; `schema?`: {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `description?`: `string`; `summary?`: `string`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `valueOf?`: `boolean`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `valueOf?`: `boolean`; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: … | … | … | … | … | … | … | …; `allOf?`: …\[]; `anyOf?`: …\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `defaultMapping?`: …; `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `examples?`: …\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `items?`: { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: … | … | … | … | … | …; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: `"array"`; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `name?`: …; `namespace?`: …; `nodeType?`: …; `prefix?`: …; }; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: … | … | … | … | … | … | … | …; `allOf?`: …\[]; `anyOf?`: …\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `defaultMapping?`: …; `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `examples?`: …\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: … | … | … | … | … | …; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: `NonArraySchemaObjectType`; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `name?`: …; `namespace?`: …; `nodeType?`: …; `prefix?`: …; }; } | {\[`key`: `` `x-${(...)}` ``]: `any`; \[`key`: `string`]: `any`; `$schema?`: `string`; `additionalProperties?`: … | … | … | … | … | … | … | …; `allOf?`: …\[]; `anyOf?`: …\[]; `const?`: `any`; `contentMediaType?`: `string`; `default?`: `any`; `deprecated?`: `boolean`; `description?`: `string`; `discriminator?`: { `defaultMapping?`: …; `mapping?`: …; `propertyName?`: …; }; `enum?`: …\[]; `example?`: `any`; `examples?`: …\[]; `exclusiveMaximum?`: `number`; `exclusiveMinimum?`: `number`; `externalDocs?`: { `description?`: …; `url?`: …; }; `format?`: `string`; `items?`: { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { \[x: \`x-${string}\`]: any; \[x: string]: any; valueOf?: () => boolean; } | { …; } | { …; } | { …; }; `maximum?`: `number`; `maxItems?`: `number`; `maxLength?`: `number`; `maxProperties?`: `number`; `minimum?`: `number`; `minItems?`: `number`; `minLength?`: `number`; `minProperties?`: `number`; `multipleOf?`: `number`; `not?`: … | … | … | … | … | …; `oneOf?`: …\[]; `pattern?`: `string`; `patternProperties?`: {\[`key`: …]: …; }; `properties?`: {\[`key`: …]: …; }; `readOnly?`: `boolean`; `required?`: …\[]; `title?`: `string`; `type?`: …\[]; `uniqueItems?`: `boolean`; `writeOnly?`: `boolean`; `xml?`: { `name?`: …; `namespace?`: …; `nodeType?`: …; `prefix?`: …; }; }; }; }; `description?`: `string`; `required?`: `boolean`; }; `responses?`: {\[`key`: `string`]: {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `description?`: `string`; `summary?`: `string`; } | {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `content?`: {\[`key`: `string`]: {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `description?`: `string`; `summary?`: `string`; } | { `encoding?`: {\[`key`: `string`]: `object`; }; `example?`: `any`; `examples?`: {\[`key`: `string`]: … | …; }; `itemEncoding?`: { `allowReserved?`: `boolean`; `contentType?`: `string`; `encoding?`: {\[`key`: …]: …; }; `explode?`: `boolean`; `headers?`: {\[`key`: …]: …; }; `itemEncoding?`: { style?: string; explode?: boolean; allowReserved?: boolean; contentType?: string; headers?: { \[x: string]: { \[x: string]: any; \[x: number]: any; summary?: string; description?: string; } | { description?: string; … 9 more …; schema?: { …; } | … 4 more … | { …; }; }; }; encoding?: { …; }; prefixEncodi…; `prefixEncoding?`: …\[]; `style?`: `string`; }; `itemSchema?`: {\[`key`: …]: …; \[`key`: …]: …; `description?`: …; `summary?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; }; `prefixEncoding?`: `object`\[]; `schema?`: {\[`key`: …]: …; \[`key`: …]: …; `description?`: …; `summary?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; }; }; }; `headers?`: {\[`key`: `string`]: {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `description?`: `string`; `summary?`: `string`; } | { `allowEmptyValue?`: `boolean`; `allowReserved?`: `boolean`; `content?`: {\[`key`: `string`]: … | …; }; `deprecated?`: `boolean`; `description?`: `string`; `example?`: `any`; `examples?`: {\[`key`: `string`]: … | …; }; `explode?`: `boolean`; `required?`: `boolean`; `schema?`: {\[`key`: …]: …; \[`key`: …]: …; `description?`: …; `summary?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `valueOf?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; } | {\[`key`: …]: …; \[`key`: …]: …; `$schema?`: …; `additionalProperties?`: …; `allOf?`: …; `anyOf?`: …; `const?`: …; `contentMediaType?`: …; `default?`: …; `deprecated?`: …; `description?`: …; `discriminator?`: …; `enum?`: …; `example?`: …; `examples?`: …; `exclusiveMaximum?`: …; `exclusiveMinimum?`: …; `externalDocs?`: …; `format?`: …; `items?`: …; `maximum?`: …; `maxItems?`: …; `maxLength?`: …; `maxProperties?`: …; `minimum?`: …; `minItems?`: …; `minLength?`: …; `minProperties?`: …; `multipleOf?`: …; `not?`: …; `oneOf?`: …; `pattern?`: …; `patternProperties?`: …; `properties?`: …; `readOnly?`: …; `required?`: …; `title?`: …; `type?`: …; `uniqueItems?`: …; `writeOnly?`: …; `xml?`: …; }; `style?`: `ParameterStyle`; }; }; `links?`: {\[`key`: `string`]: {\[`key`: `string`]: `any`; \[`key`: `number`]: `any`; `description?`: `string`; `summary?`: `string`; } | { `description?`: `string`; `operationId?`: `string`; `operationRef?`: `string`; `parameters?`: {\[`key`: `string`]: `any`; }; `requestBody?`: `any`; `server?`: { `description?`: `string`; `name?`: `string`; `url?`: `string`; `variables?`: {\[`key`: …]: …; }; }; }; }; `summary?`: `string`; }; }; `servers?`: `object`\[]; } #### renderer? [Section titled “renderer?”](#renderer-2) > `optional` **renderer**: [`JSXRenderer`](/api/type-aliases/jsxrenderer/) Custom renderer for this route. #### requestTimeout? [Section titled “requestTimeout?”](#requesttimeout-2) > `optional` **requestTimeout**: `number` Timeout for this specific route (milliseconds). #### Inherited from [Section titled “Inherited from”](#inherited-from-4) `ShokupanRouter.config` *** ### metadata? [Section titled “metadata?”](#metadata) > `optional` **metadata**: [`RouteMetadata`](/api/interfaces/routemetadata/) Defined in: [src/router.ts:105](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L105) #### Inherited from [Section titled “Inherited from”](#inherited-from-5) `ShokupanRouter.metadata` *** ### middleware [Section titled “middleware”](#middleware) > **middleware**: [`Middleware`](/api/type-aliases/middleware/)\[] = `[]` Defined in: [src/router.ts:94](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L94) #### Inherited from [Section titled “Inherited from”](#inherited-from-6) `ShokupanRouter.middleware` *** ### openApiSpec? [Section titled “openApiSpec?”](#openapispec) > `optional` **openApiSpec**: `any` Defined in: [src/shokupan.ts:95](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/shokupan.ts#L95) *** ### requestTimeout? [Section titled “requestTimeout?”](#requesttimeout-3) > `optional` **requestTimeout**: `number` Defined in: [src/router.ts:792](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L792) #### Inherited from [Section titled “Inherited from”](#inherited-from-7) `ShokupanRouter.requestTimeout` ## Accessors [Section titled “Accessors”](#accessors) ### logger [Section titled “logger”](#logger-2) #### Get Signature [Section titled “Get Signature”](#get-signature) > **get** **logger**(): `object` Defined in: [src/shokupan.ts:100](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/shokupan.ts#L100) ##### Returns [Section titled “Returns”](#returns-7) ###### debug()? [Section titled “debug()?”](#debug) > `optional` **debug**: (`msg`, `props`) => `void` ###### Parameters [Section titled “Parameters”](#parameters-7) ###### msg [Section titled “msg”](#msg-5) `string` ###### props [Section titled “props”](#props-5) `Record`<`string`, `any`> ###### Returns [Section titled “Returns”](#returns-8) `void` ###### error()? [Section titled “error()?”](#error) > `optional` **error**: (`msg`, `props`) => `void` ###### Parameters [Section titled “Parameters”](#parameters-8) ###### msg [Section titled “msg”](#msg-6) `string` ###### props [Section titled “props”](#props-6) `Record`<`string`, `any`> ###### Returns [Section titled “Returns”](#returns-9) `void` ###### fatal()? [Section titled “fatal()?”](#fatal) > `optional` **fatal**: (`msg`, `props`) => `void` Something fatally went wrong and the application cannot continue. ###### Parameters [Section titled “Parameters”](#parameters-9) ###### msg [Section titled “msg”](#msg-7) `string` ###### props [Section titled “props”](#props-7) `Record`<`string`, `any`> ###### Returns [Section titled “Returns”](#returns-10) `void` ###### info()? [Section titled “info()?”](#info) > `optional` **info**: (`msg`, `props`) => `void` ###### Parameters [Section titled “Parameters”](#parameters-10) ###### msg [Section titled “msg”](#msg-8) `string` ###### props [Section titled “props”](#props-8) `Record`<`string`, `any`> ###### Returns [Section titled “Returns”](#returns-11) `void` ###### verbose? [Section titled “verbose?”](#verbose) > `optional` **verbose**: `boolean` ###### warning()? [Section titled “warning()?”](#warning) > `optional` **warning**: (`msg`, `props`) => `void` ###### Parameters [Section titled “Parameters”](#parameters-11) ###### msg [Section titled “msg”](#msg-9) `string` ###### props [Section titled “props”](#props-9) `Record`<`string`, `any`> ###### Returns [Section titled “Returns”](#returns-12) `void` *** ### root [Section titled “root”](#root) #### Get Signature [Section titled “Get Signature”](#get-signature-1) > **get** **root**(): `Shokupan`<`any`> Defined in: [src/router.ts:99](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L99) ##### Returns [Section titled “Returns”](#returns-13) `Shokupan`<`any`> #### Inherited from [Section titled “Inherited from”](#inherited-from-8) `ShokupanRouter.root` *** ### rootConfig [Section titled “rootConfig”](#rootconfig) #### Get Signature [Section titled “Get Signature”](#get-signature-2) > **get** **rootConfig**(): `object` Defined in: [src/router.ts:96](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L96) ##### Returns [Section titled “Returns”](#returns-14) ###### autoBackpressureFeedback? [Section titled “autoBackpressureFeedback?”](#autobackpressurefeedback-3) > `optional` **autoBackpressureFeedback**: `boolean` Whether to enable automatic backpressure based on system CPU load. ###### Default [Section titled “Default”](#default-19) ```ts false ``` ###### autoBackpressureLevel? [Section titled “autoBackpressureLevel?”](#autobackpressurelevel-3) > `optional` **autoBackpressureLevel**: `number` The CPU usage percentage threshold (0-100) at which to start rejecting requests (429). ###### Default [Section titled “Default”](#default-20) ```ts 60 ``` ###### controllersOnly? [Section titled “controllersOnly?”](#controllersonly-3) > `optional` **controllersOnly**: `boolean` Whether to enforce that only controller classes (constructors) are accepted by the router. ###### Default [Section titled “Default”](#default-21) ```ts false ``` ###### development? [Section titled “development?”](#development-2) > `optional` **development**: `boolean` Whether to run in development mode. ###### Default [Section titled “Default”](#default-22) ```ts process.env.NODE_ENV !== "production" ``` ###### enableAsyncLocalStorage? [Section titled “enableAsyncLocalStorage?”](#enableasynclocalstorage-2) > `optional` **enableAsyncLocalStorage**: `boolean` Whether to enable AsyncLocalStorage. (Request local storage) ###### Default [Section titled “Default”](#default-23) ```ts false ``` ###### enableMiddlewareTracking? [Section titled “enableMiddlewareTracking?”](#enablemiddlewaretracking-2) > `optional` **enableMiddlewareTracking**: `boolean` Whether to enable middleware and handler tracking. When enabled, `ctx.handlerStack` will be populated with the handlers the request has passed through. Also, `ctx.state` will be a Proxy that tracks changes made by each handler. ###### Default [Section titled “Default”](#default-24) ```ts false ``` ###### enableOpenApiGen? [Section titled “enableOpenApiGen?”](#enableopenapigen-2) > `optional` **enableOpenApiGen**: `boolean` Whether to enable OpenAPI generation. ###### Default [Section titled “Default”](#default-25) ```ts true ``` ###### enableTracing? [Section titled “enableTracing?”](#enabletracing-2) > `optional` **enableTracing**: `boolean` Whether to enable OpenTelemetry tracing. ###### Default [Section titled “Default”](#default-26) ```ts false ``` ###### hooks? [Section titled “hooks?”](#hooks-3) > `optional` **hooks**: { `afterValidate?`: (`ctx`, `data`) => `void` | `Promise`<`void`>; `beforeValidate?`: (`ctx`, `data`) => `void` | `Promise`<`void`>; `onError?`: (`ctx`, `error`) => `void` | `Promise`<`void`>; `onReadTimeout?`: (`ctx`) => `void` | `Promise`<`void`>; `onRequestEnd?`: (`ctx`) => `void` | `Promise`<`void`>; `onRequestStart?`: (`ctx`) => `void` | `Promise`<`void`>; `onRequestTimeout?`: (`ctx`) => `void` | `Promise`<`void`>; `onResponseEnd?`: (`ctx`, `response`) => `void` | `Promise`<`void`>; `onResponseStart?`: (`ctx`, `response`) => `void` | `Promise`<`void`>; `onWriteTimeout?`: (`ctx`) => `void` | `Promise`<`void`>; } | `object`\[] Lifecycle hooks. ###### hostname? [Section titled “hostname?”](#hostname-2) > `optional` **hostname**: `string` The hostname to be used for the server. ###### Default [Section titled “Default”](#default-27) ```ts "localhost" ``` ###### httpLogger()? [Section titled “httpLogger()?”](#httplogger-2) > `optional` **httpLogger**: (`ctx`) => `void` HTTP logger function. ###### Parameters [Section titled “Parameters”](#parameters-12) ###### ctx [Section titled “ctx”](#ctx-1) [`ShokupanContext`](/api/classes/shokupancontext/)<`Record`<`string`, `any`>> ###### Returns [Section titled “Returns”](#returns-15) `void` ###### jsonParser? [Section titled “jsonParser?”](#jsonparser-2) > `optional` **jsonParser**: `"native"` | `"parse-json"` | `"secure-json-parse"` JSON parser to use for parsing request bodies. Options: * `'native'`: Use the built-in JSON.parse (fastest, default) * `'parse-json'`: Use the parse-json library for better error messages with minimal performance overhead (\~5% slower than native) * `'secure-json-parse'`: Use secure-json-parse for protection against prototype pollution (20-30% slower than native) Performance implications based on benchmarks: * `native`: Fastest option, excellent for production * `parse-json`: Nearly identical performance to native with better error messages, good for development * `secure-json-parse`: Provides security at the cost of performance, use only for untrusted input ###### Default [Section titled “Default”](#default-28) ```ts 'native' ``` ###### logger? [Section titled “logger?”](#logger-3) > `optional` **logger**: `object` Logger object. ###### logger.debug()? [Section titled “logger.debug()?”](#loggerdebug-2) > `optional` **debug**: (`msg`, `props`) => `void` ###### Parameters [Section titled “Parameters”](#parameters-13) ###### msg [Section titled “msg”](#msg-10) `string` ###### props [Section titled “props”](#props-10) `Record`<`string`, `any`> ###### Returns [Section titled “Returns”](#returns-16) `void` ###### logger.error()? [Section titled “logger.error()?”](#loggererror-2) > `optional` **error**: (`msg`, `props`) => `void` ###### Parameters [Section titled “Parameters”](#parameters-14) ###### msg [Section titled “msg”](#msg-11) `string` ###### props [Section titled “props”](#props-11) `Record`<`string`, `any`> ###### Returns [Section titled “Returns”](#returns-17) `void` ###### logger.fatal()? [Section titled “logger.fatal()?”](#loggerfatal-2) > `optional` **fatal**: (`msg`, `props`) => `void` Something fatally went wrong and the application cannot continue. ###### Parameters [Section titled “Parameters”](#parameters-15) ###### msg [Section titled “msg”](#msg-12) `string` ###### props [Section titled “props”](#props-12) `Record`<`string`, `any`> ###### Returns [Section titled “Returns”](#returns-18) `void` ###### logger.info()? [Section titled “logger.info()?”](#loggerinfo-2) > `optional` **info**: (`msg`, `props`) => `void` ###### Parameters [Section titled “Parameters”](#parameters-16) ###### msg [Section titled “msg”](#msg-13) `string` ###### props [Section titled “props”](#props-13) `Record`<`string`, `any`> ###### Returns [Section titled “Returns”](#returns-19) `void` ###### logger.verbose? [Section titled “logger.verbose?”](#loggerverbose-2) > `optional` **verbose**: `boolean` ###### logger.warning()? [Section titled “logger.warning()?”](#loggerwarning-2) > `optional` **warning**: (`msg`, `props`) => `void` ###### Parameters [Section titled “Parameters”](#parameters-17) ###### msg [Section titled “msg”](#msg-14) `string` ###### props [Section titled “props”](#props-14) `Record`<`string`, `any`> ###### Returns [Section titled “Returns”](#returns-20) `void` ###### middlewareTrackingMaxCapacity? [Section titled “middlewareTrackingMaxCapacity?”](#middlewaretrackingmaxcapacity-2) > `optional` **middlewareTrackingMaxCapacity**: `number` Maximum number of middleware executions to store in the datastore. Only applies when enableMiddlewareTracking is true. ###### Default [Section titled “Default”](#default-29) ```ts 10000 ``` ###### middlewareTrackingTTL? [Section titled “middlewareTrackingTTL?”](#middlewaretrackingttl-2) > `optional` **middlewareTrackingTTL**: `number` Time-to-live for middleware tracking entries in milliseconds. Entries older than this will be cleaned up. Only applies when enableMiddlewareTracking is true. ###### Default [Section titled “Default”](#default-30) ```ts 86400000 (1 day) ``` ###### port? [Section titled “port?”](#port-2) > `optional` **port**: `number` The port to be used for the server. ###### Default [Section titled “Default”](#default-31) ```ts 3000 ``` ###### readTimeout? [Section titled “readTimeout?”](#readtimeout-2) > `optional` **readTimeout**: `number` Timeout for reading the request body (milliseconds). Maps to Bun’s `idleTimeout`. ###### Default [Section titled “Default”](#default-32) ```ts 30000 ``` ###### renderer? [Section titled “renderer?”](#renderer-3) > `optional` **renderer**: [`JSXRenderer`](/api/type-aliases/jsxrenderer/) JSX Rendering function. ###### requestTimeout? [Section titled “requestTimeout?”](#requesttimeout-4) > `optional` **requestTimeout**: `number` Timeout for processing the request (milliseconds). Maps to `server.timeout(req, seconds)`. ###### Default [Section titled “Default”](#default-33) ```ts 0 (disabled) ``` ###### reusePort? [Section titled “reusePort?”](#reuseport-2) > `optional` **reusePort**: `boolean` Whether to reuse the port. ###### Default [Section titled “Default”](#default-34) ```ts false ``` ###### serverFactory? [Section titled “serverFactory?”](#serverfactory-2) > `optional` **serverFactory**: [`ServerFactory`](/api/interfaces/serverfactory/) Factory function to create the server instance. Defaults to Bun.serve. ###### validateStatusCodes? [Section titled “validateStatusCodes?”](#validatestatuscodes-2) > `optional` **validateStatusCodes**: `boolean` Whether to validate response status codes. ###### Default [Section titled “Default”](#default-35) ```ts true ``` ###### writeTimeout? [Section titled “writeTimeout?”](#writetimeout-2) > `optional` **writeTimeout**: `number` Timeout for writing the response (milliseconds). Not currently supported by Bun.serve natively. Experimental This API should not be used in production and may be trimmed from a public release. #### Inherited from [Section titled “Inherited from”](#inherited-from-9) `ShokupanRouter.rootConfig` ## Methods [Section titled “Methods”](#methods) ### \[$dispatch]\() [Section titled “\[$dispatch\]()”](#dispatch) > **\[$dispatch]**(`req`): `Promise`<`Response`> Defined in: [src/shokupan.ts:288](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/shokupan.ts#L288) #### Parameters [Section titled “Parameters”](#parameters-18) ##### req [Section titled “req”](#req) [`ShokupanRequest`](/api/type-aliases/shokupanrequest/)<`T`> #### Returns [Section titled “Returns”](#returns-21) `Promise`<`Response`> *** ### add() [Section titled “add()”](#add) > **add**(`arg`): `Shokupan`<`T`> Defined in: [src/router.ts:808](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L808) Adds a route to the router. #### Parameters [Section titled “Parameters”](#parameters-19) ##### arg [Section titled “arg”](#arg) Route configuration object ###### controller? [Section titled “controller?”](#controller) `any` Controller for the route ###### group? [Section titled “group?”](#group-1) `string` Group for the route ###### handler [Section titled “handler”](#handler) [`ShokupanHandler`](/api/type-aliases/shokupanhandler/)<`T`> Route handler function ###### method [Section titled “method”](#method) [`Method`](/api/type-aliases/method/) HTTP method ###### path [Section titled “path”](#path) `string` URL path ###### regex? [Section titled “regex?”](#regex) `RegExp` Custom regex for path matching ###### renderer? [Section titled “renderer?”](#renderer-4) [`JSXRenderer`](/api/type-aliases/jsxrenderer/) JSX renderer for the route ###### requestTimeout? [Section titled “requestTimeout?”](#requesttimeout-5) `number` Timeout for this route in milliseconds ###### spec? [Section titled “spec?”](#spec) [`MethodAPISpec`](/api/type-aliases/methodapispec/) OpenAPI specification for the route #### Returns [Section titled “Returns”](#returns-22) `Shokupan`<`T`> #### Inherited from [Section titled “Inherited from”](#inherited-from-10) `ShokupanRouter.add` *** ### delete() [Section titled “delete()”](#delete) #### Call Signature [Section titled “Call Signature”](#call-signature) > **delete**<`Path`>(`path`, …`handlers`): `any` Defined in: [src/router.ts:1079](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L1079) Adds a DELETE route to the router. ##### Type Parameters [Section titled “Type Parameters”](#type-parameters-1) ###### Path [Section titled “Path”](#path-1) `Path` *extends* `string` ##### Parameters [Section titled “Parameters”](#parameters-20) ###### path [Section titled “path”](#path-2) `Path` URL path ###### handlers [Section titled “handlers”](#handlers) …[`ShokupanHandler`](/api/type-aliases/shokupanhandler/)<`T`, [`RouteParams`](/api/type-aliases/routeparams/)<`Path`>>\[] Route handler functions ##### Returns [Section titled “Returns”](#returns-23) `any` ##### Inherited from [Section titled “Inherited from”](#inherited-from-11) `ShokupanRouter.delete` #### Call Signature [Section titled “Call Signature”](#call-signature-1) > **delete**<`Path`>(`path`, `spec`, …`handlers`): `any` Defined in: [src/router.ts:1087](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L1087) Adds a DELETE route to the router. ##### Type Parameters [Section titled “Type Parameters”](#type-parameters-2) ###### Path [Section titled “Path”](#path-3) `Path` *extends* `string` ##### Parameters [Section titled “Parameters”](#parameters-21) ###### path [Section titled “path”](#path-4) `Path` URL path ###### spec [Section titled “spec”](#spec-1) [`MethodAPISpec`](/api/type-aliases/methodapispec/) OpenAPI specification for the route ###### handlers [Section titled “handlers”](#handlers-1) …[`ShokupanHandler`](/api/type-aliases/shokupanhandler/)<`T`, [`RouteParams`](/api/type-aliases/routeparams/)<`Path`>>\[] Route handler functions ##### Returns [Section titled “Returns”](#returns-24) `any` ##### Inherited from [Section titled “Inherited from”](#inherited-from-12) `ShokupanRouter.delete` *** ### fetch() [Section titled “fetch()”](#fetch) > **fetch**(`req`, `server?`): `Promise`<`Response`> Defined in: [src/shokupan.ts:351](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/shokupan.ts#L351) Handles an incoming request (Bun.serve interface). This logic contains the middleware chain and router dispatch. #### Parameters [Section titled “Parameters”](#parameters-22) ##### req [Section titled “req”](#req-1) `Request` The request to handle. ##### server? [Section titled “server?”](#server) `Server` The server instance. #### Returns [Section titled “Returns”](#returns-25) `Promise`<`Response`> The response to send. *** ### find() [Section titled “find()”](#find) > **find**(`method`, `path`): `object` Defined in: [src/router.ts:726](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L726) Find a route matching the given method and path. #### Parameters [Section titled “Parameters”](#parameters-23) ##### method [Section titled “method”](#method-1) `string` HTTP method ##### path [Section titled “path”](#path-5) `string` Request path #### Returns [Section titled “Returns”](#returns-26) `object` Route handler and parameters if found, otherwise null ##### handler [Section titled “handler”](#handler-1) > **handler**: [`ShokupanHandler`](/api/type-aliases/shokupanhandler/)<`T`> ##### params [Section titled “params”](#params) > **params**: `Record`<`string`, `string`> #### Inherited from [Section titled “Inherited from”](#inherited-from-13) `ShokupanRouter.find` *** ### generateApiSpec() [Section titled “generateApiSpec()”](#generateapispec) > **generateApiSpec**(`options`): `any` Defined in: [src/router.ts:1306](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L1306) Generates an OpenAPI 3.1 Document by recursing through the router and its descendants. Now includes runtime analysis of handler functions to infer request/response types. #### Parameters [Section titled “Parameters”](#parameters-24) ##### options [Section titled “options”](#options) [`OpenAPIOptions`](/api/interfaces/openapioptions/) = `{}` #### Returns [Section titled “Returns”](#returns-27) `any` #### Inherited from [Section titled “Inherited from”](#inherited-from-14) `ShokupanRouter.generateApiSpec` *** ### get() [Section titled “get()”](#get) #### Call Signature [Section titled “Call Signature”](#call-signature-2) > **get**<`Path`>(`path`, …`handlers`): `any` Defined in: [src/router.ts:1019](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L1019) Adds a GET route to the router. ##### Type Parameters [Section titled “Type Parameters”](#type-parameters-3) ###### Path [Section titled “Path”](#path-6) `Path` *extends* `string` ##### Parameters [Section titled “Parameters”](#parameters-25) ###### path [Section titled “path”](#path-7) `Path` URL path ###### handlers [Section titled “handlers”](#handlers-2) …[`ShokupanHandler`](/api/type-aliases/shokupanhandler/)<`T`, [`RouteParams`](/api/type-aliases/routeparams/)<`Path`>>\[] Route handler functions ##### Returns [Section titled “Returns”](#returns-28) `any` ##### Inherited from [Section titled “Inherited from”](#inherited-from-15) `ShokupanRouter.get` #### Call Signature [Section titled “Call Signature”](#call-signature-3) > **get**<`Path`>(`path`, `spec`, …`handlers`): `any` Defined in: [src/router.ts:1027](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L1027) Adds a GET route to the router. ##### Type Parameters [Section titled “Type Parameters”](#type-parameters-4) ###### Path [Section titled “Path”](#path-8) `Path` *extends* `string` ##### Parameters [Section titled “Parameters”](#parameters-26) ###### path [Section titled “path”](#path-9) `Path` URL path ###### spec [Section titled “spec”](#spec-2) [`MethodAPISpec`](/api/type-aliases/methodapispec/) OpenAPI specification for the route ###### handlers [Section titled “handlers”](#handlers-3) …[`ShokupanHandler`](/api/type-aliases/shokupanhandler/)<`T`, [`RouteParams`](/api/type-aliases/routeparams/)<`Path`>>\[] Route handler functions ##### Returns [Section titled “Returns”](#returns-29) `any` ##### Inherited from [Section titled “Inherited from”](#inherited-from-16) `ShokupanRouter.get` *** ### getComponentRegistry() [Section titled “getComponentRegistry()”](#getcomponentregistry) > **getComponentRegistry**(): `object` Defined in: [src/router.ts:110](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L110) #### Returns [Section titled “Returns”](#returns-30) `object` ##### controllers [Section titled “controllers”](#controllers) > **controllers**: `object`\[] ##### metadata [Section titled “metadata”](#metadata-1) > **metadata**: [`RouteMetadata`](/api/interfaces/routemetadata/) ##### middleware [Section titled “middleware”](#middleware-1) > **middleware**: `object`\[] ##### routers [Section titled “routers”](#routers) > **routers**: `object`\[] ##### routes [Section titled “routes”](#routes-1) > **routes**: `object`\[] #### Inherited from [Section titled “Inherited from”](#inherited-from-17) `ShokupanRouter.getComponentRegistry` *** ### getRoutes() [Section titled “getRoutes()”](#getroutes) > **getRoutes**(): `object`\[] Defined in: [src/router.ts:229](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L229) Returns all routes attached to this router and its descendants. #### Returns [Section titled “Returns”](#returns-31) `object`\[] #### Inherited from [Section titled “Inherited from”](#inherited-from-18) `ShokupanRouter.getRoutes` *** ### guard() [Section titled “guard()”](#guard) #### Call Signature [Section titled “Call Signature”](#call-signature-4) > **guard**(`handler`): `void` Defined in: [src/router.ts:1159](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L1159) Adds a guard to the router that applies to all routes added **after** this point. Guards must return true or call `ctx.next()` to allow the request to continue. ##### Parameters [Section titled “Parameters”](#parameters-27) ###### handler [Section titled “handler”](#handler-2) [`ShokupanHandler`](/api/type-aliases/shokupanhandler/)<`T`> Guard handler function ##### Returns [Section titled “Returns”](#returns-32) `void` ##### Inherited from [Section titled “Inherited from”](#inherited-from-19) `ShokupanRouter.guard` #### Call Signature [Section titled “Call Signature”](#call-signature-5) > **guard**(`spec`, `handler`): `any` Defined in: [src/router.ts:1167](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L1167) Adds a guard to the router that applies to all routes added **after** this point. Guards must return true or call `ctx.next()` to allow the request to continue. ##### Parameters [Section titled “Parameters”](#parameters-28) ###### spec [Section titled “spec”](#spec-3) [`GuardAPISpec`](/api/type-aliases/guardapispec/) OpenAPI specification for the guard ###### handler [Section titled “handler”](#handler-3) [`ShokupanHandler`](/api/type-aliases/shokupanhandler/)<`T`> Guard handler function ##### Returns [Section titled “Returns”](#returns-33) `any` ##### Inherited from [Section titled “Inherited from”](#inherited-from-20) `ShokupanRouter.guard` *** ### head() [Section titled “head()”](#head) #### Call Signature [Section titled “Call Signature”](#call-signature-6) > **head**<`Path`>(`path`, …`handlers`): `any` Defined in: [src/router.ts:1139](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L1139) Adds a HEAD route to the router. ##### Type Parameters [Section titled “Type Parameters”](#type-parameters-5) ###### Path [Section titled “Path”](#path-10) `Path` *extends* `string` ##### Parameters [Section titled “Parameters”](#parameters-29) ###### path [Section titled “path”](#path-11) `Path` URL path ###### handlers [Section titled “handlers”](#handlers-4) …[`ShokupanHandler`](/api/type-aliases/shokupanhandler/)<`T`, [`RouteParams`](/api/type-aliases/routeparams/)<`Path`>>\[] Route handler functions ##### Returns [Section titled “Returns”](#returns-34) `any` ##### Inherited from [Section titled “Inherited from”](#inherited-from-21) `ShokupanRouter.head` #### Call Signature [Section titled “Call Signature”](#call-signature-7) > **head**<`Path`>(`path`, `spec`, …`handlers`): `any` Defined in: [src/router.ts:1147](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L1147) Adds a HEAD route to the router. ##### Type Parameters [Section titled “Type Parameters”](#type-parameters-6) ###### Path [Section titled “Path”](#path-12) `Path` *extends* `string` ##### Parameters [Section titled “Parameters”](#parameters-30) ###### path [Section titled “path”](#path-13) `Path` URL path ###### spec [Section titled “spec”](#spec-4) [`MethodAPISpec`](/api/type-aliases/methodapispec/) OpenAPI specification for the route ###### handlers [Section titled “handlers”](#handlers-5) …[`ShokupanHandler`](/api/type-aliases/shokupanhandler/)<`T`, [`RouteParams`](/api/type-aliases/routeparams/)<`Path`>>\[] Route handler functions ##### Returns [Section titled “Returns”](#returns-35) `any` ##### Inherited from [Section titled “Inherited from”](#inherited-from-22) `ShokupanRouter.head` *** ### internalRequest() [Section titled “internalRequest()”](#internalrequest) > **internalRequest**(`arg`): `Promise`<`Response`> Defined in: [src/router.ts:261](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L261) Makes an internal request through this router’s full routing pipeline. This is useful for calling other routes internally and supports streaming responses. #### Parameters [Section titled “Parameters”](#parameters-31) ##### arg [Section titled “arg”](#arg-1) `string` | { `body?`: `any`; `headers?`: [`HeadersInit`](/api/type-aliases/headersinit/); `method?`: [`Method`](/api/type-aliases/method/); `path`: `string`; } #### Returns [Section titled “Returns”](#returns-36) `Promise`<`Response`> The raw Response object. #### Inherited from [Section titled “Inherited from”](#inherited-from-23) `ShokupanRouter.internalRequest` *** ### listen() [Section titled “listen()”](#listen) > **listen**(`port?`): `Promise`<`Server` | `Server`<*typeof* `IncomingMessage`, *typeof* `ServerResponse`>> Defined in: [src/shokupan.ts:220](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/shokupan.ts#L220) Starts the application server. #### Parameters [Section titled “Parameters”](#parameters-32) ##### port? [Section titled “port?”](#port-3) `number` The port to listen on. If not specified, the port from the configuration is used. If that is not specified, port 3000 is used. #### Returns [Section titled “Returns”](#returns-37) `Promise`<`Server` | `Server`<*typeof* `IncomingMessage`, *typeof* `ServerResponse`>> The server instance. *** ### mount() [Section titled “mount()”](#mount) > **mount**(`prefix`, `controller`): `Shokupan`<`T`> Defined in: [src/router.ts:205](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L205) Mounts a controller instance to a path prefix. Controller can be a convection router or an arbitrary class. Routes are derived from method names: * get(ctx) -> GET /prefix/ * getUsers(ctx) -> GET /prefix/users * postCreate(ctx) -> POST /prefix/create #### Parameters [Section titled “Parameters”](#parameters-33) ##### prefix [Section titled “prefix”](#prefix) `string` ##### controller [Section titled “controller”](#controller-1) `Record`<`string`, `any`> | [`ShokupanController`](/api/type-aliases/shokupancontroller/) | `ShokupanRouter`<`T`> | `ShokupanRouter`<`Record`<`string`, `any`>> | [`ShokupanController`](/api/type-aliases/shokupancontroller/)<`T`> #### Returns [Section titled “Returns”](#returns-38) `Shokupan`<`T`> #### Inherited from [Section titled “Inherited from”](#inherited-from-24) `ShokupanRouter.mount` *** ### onSpecAvailable() [Section titled “onSpecAvailable()”](#onspecavailable) > **onSpecAvailable**(`callback`): `Shokupan`<`T`> Defined in: [src/shokupan.ts:209](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/shokupan.ts#L209) Registers a callback to be executed when the OpenAPI spec is available. This happens after generateOpenApi() but before the server starts listening (or at least before it finishes startup if async). #### Parameters [Section titled “Parameters”](#parameters-34) ##### callback [Section titled “callback”](#callback) (`spec`) => `void` | `Promise`<`void`> #### Returns [Section titled “Returns”](#returns-39) `Shokupan`<`T`> *** ### onStart() [Section titled “onStart()”](#onstart) > **onStart**(`callback`): `Shokupan`<`T`> Defined in: [src/shokupan.ts:198](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/shokupan.ts#L198) Registers a callback to be executed before the server starts listening. #### Parameters [Section titled “Parameters”](#parameters-35) ##### callback [Section titled “callback”](#callback-1) () => `void` | `Promise`<`void`> #### Returns [Section titled “Returns”](#returns-40) `Shokupan`<`T`> *** ### options() [Section titled “options()”](#options-1) #### Call Signature [Section titled “Call Signature”](#call-signature-8) > **options**<`Path`>(`path`, …`handlers`): `any` Defined in: [src/router.ts:1119](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L1119) Adds a OPTIONS route to the router. ##### Type Parameters [Section titled “Type Parameters”](#type-parameters-7) ###### Path [Section titled “Path”](#path-14) `Path` *extends* `string` ##### Parameters [Section titled “Parameters”](#parameters-36) ###### path [Section titled “path”](#path-15) `Path` URL path ###### handlers [Section titled “handlers”](#handlers-6) …[`ShokupanHandler`](/api/type-aliases/shokupanhandler/)<`T`, [`RouteParams`](/api/type-aliases/routeparams/)<`Path`>>\[] Route handler functions ##### Returns [Section titled “Returns”](#returns-41) `any` ##### Inherited from [Section titled “Inherited from”](#inherited-from-25) `ShokupanRouter.options` #### Call Signature [Section titled “Call Signature”](#call-signature-9) > **options**<`Path`>(`path`, `spec`, …`handlers`): `any` Defined in: [src/router.ts:1127](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L1127) Adds a OPTIONS route to the router. ##### Type Parameters [Section titled “Type Parameters”](#type-parameters-8) ###### Path [Section titled “Path”](#path-16) `Path` *extends* `string` ##### Parameters [Section titled “Parameters”](#parameters-37) ###### path [Section titled “path”](#path-17) `Path` URL path ###### spec [Section titled “spec”](#spec-5) [`MethodAPISpec`](/api/type-aliases/methodapispec/) OpenAPI specification for the route ###### handlers [Section titled “handlers”](#handlers-7) …[`ShokupanHandler`](/api/type-aliases/shokupanhandler/)<`T`, [`RouteParams`](/api/type-aliases/routeparams/)<`Path`>>\[] Route handler functions ##### Returns [Section titled “Returns”](#returns-42) `any` ##### Inherited from [Section titled “Inherited from”](#inherited-from-26) `ShokupanRouter.options` *** ### patch() [Section titled “patch()”](#patch) #### Call Signature [Section titled “Call Signature”](#call-signature-10) > **patch**<`Path`>(`path`, …`handlers`): `any` Defined in: [src/router.ts:1099](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L1099) Adds a PATCH route to the router. ##### Type Parameters [Section titled “Type Parameters”](#type-parameters-9) ###### Path [Section titled “Path”](#path-18) `Path` *extends* `string` ##### Parameters [Section titled “Parameters”](#parameters-38) ###### path [Section titled “path”](#path-19) `Path` URL path ###### handlers [Section titled “handlers”](#handlers-8) …[`ShokupanHandler`](/api/type-aliases/shokupanhandler/)<`T`, [`RouteParams`](/api/type-aliases/routeparams/)<`Path`>>\[] Route handler functions ##### Returns [Section titled “Returns”](#returns-43) `any` ##### Inherited from [Section titled “Inherited from”](#inherited-from-27) `ShokupanRouter.patch` #### Call Signature [Section titled “Call Signature”](#call-signature-11) > **patch**<`Path`>(`path`, `spec`, …`handlers`): `any` Defined in: [src/router.ts:1107](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L1107) Adds a PATCH route to the router. ##### Type Parameters [Section titled “Type Parameters”](#type-parameters-10) ###### Path [Section titled “Path”](#path-20) `Path` *extends* `string` ##### Parameters [Section titled “Parameters”](#parameters-39) ###### path [Section titled “path”](#path-21) `Path` URL path ###### spec [Section titled “spec”](#spec-6) [`MethodAPISpec`](/api/type-aliases/methodapispec/) OpenAPI specification for the route ###### handlers [Section titled “handlers”](#handlers-9) …[`ShokupanHandler`](/api/type-aliases/shokupanhandler/)<`T`, [`RouteParams`](/api/type-aliases/routeparams/)<`Path`>>\[] Route handler functions ##### Returns [Section titled “Returns”](#returns-44) `any` ##### Inherited from [Section titled “Inherited from”](#inherited-from-28) `ShokupanRouter.patch` *** ### post() [Section titled “post()”](#post) #### Call Signature [Section titled “Call Signature”](#call-signature-12) > **post**<`Path`>(`path`, …`handlers`): `any` Defined in: [src/router.ts:1039](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L1039) Adds a POST route to the router. ##### Type Parameters [Section titled “Type Parameters”](#type-parameters-11) ###### Path [Section titled “Path”](#path-22) `Path` *extends* `string` ##### Parameters [Section titled “Parameters”](#parameters-40) ###### path [Section titled “path”](#path-23) `Path` URL path ###### handlers [Section titled “handlers”](#handlers-10) …[`ShokupanHandler`](/api/type-aliases/shokupanhandler/)<`T`, [`RouteParams`](/api/type-aliases/routeparams/)<`Path`>>\[] Route handler functions ##### Returns [Section titled “Returns”](#returns-45) `any` ##### Inherited from [Section titled “Inherited from”](#inherited-from-29) `ShokupanRouter.post` #### Call Signature [Section titled “Call Signature”](#call-signature-13) > **post**<`Path`>(`path`, `spec`, …`handlers`): `any` Defined in: [src/router.ts:1047](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L1047) Adds a POST route to the router. ##### Type Parameters [Section titled “Type Parameters”](#type-parameters-12) ###### Path [Section titled “Path”](#path-24) `Path` *extends* `string` ##### Parameters [Section titled “Parameters”](#parameters-41) ###### path [Section titled “path”](#path-25) `Path` URL path ###### spec [Section titled “spec”](#spec-7) [`MethodAPISpec`](/api/type-aliases/methodapispec/) OpenAPI specification for the route ###### handlers [Section titled “handlers”](#handlers-11) …[`ShokupanHandler`](/api/type-aliases/shokupanhandler/)<`T`, [`RouteParams`](/api/type-aliases/routeparams/)<`Path`>>\[] Route handler functions ##### Returns [Section titled “Returns”](#returns-46) `any` ##### Inherited from [Section titled “Inherited from”](#inherited-from-30) `ShokupanRouter.post` *** ### put() [Section titled “put()”](#put) #### Call Signature [Section titled “Call Signature”](#call-signature-14) > **put**<`Path`>(`path`, …`handlers`): `any` Defined in: [src/router.ts:1059](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L1059) Adds a PUT route to the router. ##### Type Parameters [Section titled “Type Parameters”](#type-parameters-13) ###### Path [Section titled “Path”](#path-26) `Path` *extends* `string` ##### Parameters [Section titled “Parameters”](#parameters-42) ###### path [Section titled “path”](#path-27) `Path` URL path ###### handlers [Section titled “handlers”](#handlers-12) …[`ShokupanHandler`](/api/type-aliases/shokupanhandler/)<`T`, [`RouteParams`](/api/type-aliases/routeparams/)<`Path`>>\[] Route handler functions ##### Returns [Section titled “Returns”](#returns-47) `any` ##### Inherited from [Section titled “Inherited from”](#inherited-from-31) `ShokupanRouter.put` #### Call Signature [Section titled “Call Signature”](#call-signature-15) > **put**<`Path`>(`path`, `spec`, …`handlers`): `any` Defined in: [src/router.ts:1067](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L1067) Adds a PUT route to the router. ##### Type Parameters [Section titled “Type Parameters”](#type-parameters-14) ###### Path [Section titled “Path”](#path-28) `Path` *extends* `string` ##### Parameters [Section titled “Parameters”](#parameters-43) ###### path [Section titled “path”](#path-29) `Path` URL path ###### spec [Section titled “spec”](#spec-8) [`MethodAPISpec`](/api/type-aliases/methodapispec/) OpenAPI specification for the route ###### handlers [Section titled “handlers”](#handlers-13) …[`ShokupanHandler`](/api/type-aliases/shokupanhandler/)<`T`, [`RouteParams`](/api/type-aliases/routeparams/)<`Path`>>\[] Route handler functions ##### Returns [Section titled “Returns”](#returns-48) `any` ##### Inherited from [Section titled “Inherited from”](#inherited-from-32) `ShokupanRouter.put` *** ### register() [Section titled “register()”](#register) > **register**(`plugin`, `options?`): `Shokupan`<`T`> Defined in: [src/shokupan.ts:188](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/shokupan.ts#L188) Registers a plugin. #### Parameters [Section titled “Parameters”](#parameters-44) ##### plugin [Section titled “plugin”](#plugin) [`ShokupanPlugin`](/api/interfaces/shokupanplugin/) ##### options? [Section titled “options?”](#options-2) ###### path? [Section titled “path?”](#path-30) `string` #### Returns [Section titled “Returns”](#returns-49) `Shokupan`<`T`> *** ### runHooks() [Section titled “runHooks()”](#runhooks) > **runHooks**(`name`, …`args`): `Promise`<`void`> Defined in: [src/router.ts:1339](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L1339) #### Parameters [Section titled “Parameters”](#parameters-45) ##### name [Section titled “name”](#name-1) keyof [`ShokupanHooks`](/api/interfaces/shokupanhooks/)<`any`> ##### args [Section titled “args”](#args) …`any`\[] #### Returns [Section titled “Returns”](#returns-50) `Promise`<`void`> #### Inherited from [Section titled “Inherited from”](#inherited-from-33) `ShokupanRouter.runHooks` *** ### static() [Section titled “static()”](#static) > **static**(`uriPath`, `options`): `Shokupan`<`T`> Defined in: [src/router.ts:1217](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/router.ts#L1217) Statically serves a directory with standard options. #### Parameters [Section titled “Parameters”](#parameters-46) ##### uriPath [Section titled “uriPath”](#uripath) `string` URL path prefix ##### options [Section titled “options”](#options-3) Configuration options or root directory string `string` | [`StaticServeOptions`](/api/interfaces/staticserveoptions/)<`T`> #### Returns [Section titled “Returns”](#returns-51) `Shokupan`<`T`> #### Inherited from [Section titled “Inherited from”](#inherited-from-34) `ShokupanRouter.static` *** ### testRequest() [Section titled “testRequest()”](#testrequest) > **testRequest**(`options`): `Promise`<[`ProcessResult`](/api/interfaces/processresult/)> Defined in: [src/shokupan.ts:295](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/shokupan.ts#L295) Processes a request by wrapping the standard fetch method. #### Parameters [Section titled “Parameters”](#parameters-47) ##### options [Section titled “options”](#options-4) [`RequestOptions`](/api/interfaces/requestoptions/) #### Returns [Section titled “Returns”](#returns-52) `Promise`<[`ProcessResult`](/api/interfaces/processresult/)> #### Overrides [Section titled “Overrides”](#overrides-1) `ShokupanRouter.testRequest` *** ### use() [Section titled “use()”](#use) > **use**(`middleware`): `Shokupan`<`T`> Defined in: [src/shokupan.ts:129](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/shokupan.ts#L129) Adds middleware to the application. #### Parameters [Section titled “Parameters”](#parameters-48) ##### middleware [Section titled “middleware”](#middleware-2) [`Middleware`](/api/type-aliases/middleware/) #### Returns [Section titled “Returns”](#returns-53) `Shokupan`<`T`>
# ShokupanContext
Defined in: [src/context.ts:108](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/context.ts#L108) Shokupan Request Context The context object passed to all middleware and route handlers. Provides access to request data, response helpers, and typed state management. ## Examples [Section titled “Examples”](#examples) ```typescript app.get('/hello', (ctx) => { return ctx.json({ message: 'Hello' }); }); ``` ```typescript interface AppState { userId: string; requestId: string; } const app = new Shokupan(); app.use((ctx, next) => { ctx.state.requestId = crypto.randomUUID(); // ✓ Type-safe return next(); }); ``` ```typescript app.get('/users/:userId/posts/:postId', (ctx) => { // ctx.params is automatically typed as { userId: string; postId: string } const { userId, postId } = ctx.params; return ctx.json({ userId, postId }); }); ``` ```typescript interface RequestState { userId: string; permissions: string[]; } const app = new Shokupan(); app.get('/admin/users/:userId', (ctx) => { // Both typed! const { userId } = ctx.params; // ✓ From path const { permissions } = ctx.state; // ✓ From state if (!permissions.includes('admin')) { return ctx.json({ error: 'Forbidden' }, 403); } return ctx.json({ userId }); }); ``` ## Type Parameters [Section titled “Type Parameters”](#type-parameters) ### State [Section titled “State”](#state) `State` *extends* `Record`<`string`, `any`> = `Record`<`string`, `any`> The shape of `ctx.state` for type-safe state access across middleware. ### Params [Section titled “Params”](#params) `Params` *extends* `Record`<`string`, `string`> = `Record`<`string`, `string`> The shape of `ctx.params` based on the route path pattern. ## Constructors [Section titled “Constructors”](#constructors) ### Constructor [Section titled “Constructor”](#constructor) > **new ShokupanContext**<`State`, `Params`>(`request`, `server?`, `state?`, `app?`, `signal?`, `enableMiddlewareTracking?`): `ShokupanContext`<`State`, `Params`> Defined in: [src/context.ts:146](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/context.ts#L146) #### Parameters [Section titled “Parameters”](#parameters) ##### request [Section titled “request”](#request) `any` ##### server? [Section titled “server?”](#server) `Server` ##### state? [Section titled “state?”](#state-1) `State` ##### app? [Section titled “app?”](#app) [`Shokupan`](/api/classes/shokupan/) ##### signal? [Section titled “signal?”](#signal) `AbortSignal` ##### enableMiddlewareTracking? [Section titled “enableMiddlewareTracking?”](#enablemiddlewaretracking) `boolean` = `false` #### Returns [Section titled “Returns”](#returns) `ShokupanContext`<`State`, `Params`> ## Properties [Section titled “Properties”](#properties) ### \_bodyParseError? [Section titled “\_bodyParseError?”](#_bodyparseerror) > `optional` **\_bodyParseError**: `Error` Defined in: [src/context.ts:126](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/context.ts#L126) *** ### \_debug? [Section titled “\_debug?”](#_debug) > `optional` **\_debug**: [`DebugCollector`](/api/interfaces/debugcollector/) Defined in: [src/context.ts:117](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/context.ts#L117) *** ### \_finalResponse? [Section titled “\_finalResponse?”](#_finalresponse) > `optional` **\_finalResponse**: `Response` Defined in: [src/context.ts:118](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/context.ts#L118) *** ### \_rawBody? [Section titled “\_rawBody?”](#_rawbody) > `optional` **\_rawBody**: `string` | `ArrayBuffer` | `Uint8Array`<`ArrayBufferLike`> Defined in: [src/context.ts:119](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/context.ts#L119) *** ### \_routeMatched [Section titled “\_routeMatched”](#_routematched) > **\_routeMatched**: `boolean` = `false` Defined in: [src/context.ts:128](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/context.ts#L128) *** ### app? [Section titled “app?”](#app-1) > `readonly` `optional` **app**: [`Shokupan`](/api/classes/shokupan/) Defined in: [src/context.ts:150](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/context.ts#L150) *** ### handlerStack [Section titled “handlerStack”](#handlerstack) > **handlerStack**: [`HandlerStackItem`](/api/interfaces/handlerstackitem/)\[] = `[]` Defined in: [src/context.ts:114](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/context.ts#L114) *** ### params [Section titled “params”](#params-1) > **params**: `Params` Defined in: [src/context.ts:112](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/context.ts#L112) *** ### request [Section titled “request”](#request-1) > `readonly` **request**: `any` Defined in: [src/context.ts:147](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/context.ts#L147) *** ### response [Section titled “response”](#response) > `readonly` **response**: [`ShokupanResponse`](/api/classes/shokupanresponse/) Defined in: [src/context.ts:116](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/context.ts#L116) *** ### server? [Section titled “server?”](#server-1) > `readonly` `optional` **server**: `Server` Defined in: [src/context.ts:148](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/context.ts#L148) *** ### session [Section titled “session”](#session) > **session**: [`SessionData`](/api/interfaces/sessiondata/) & `object` Defined in: [src/plugins/middleware/session.ts:294](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/session.ts#L294) #### Type Declaration [Section titled “Type Declaration”](#type-declaration) ##### id [Section titled “id”](#id) > **id**: `string` ##### destroy() [Section titled “destroy()”](#destroy) > **destroy**(`callback`): `void` ###### Parameters [Section titled “Parameters”](#parameters-1) ###### callback [Section titled “callback”](#callback) (`err`) => `void` ###### Returns [Section titled “Returns”](#returns-1) `void` ##### regenerate() [Section titled “regenerate()”](#regenerate) > **regenerate**(`callback`): `void` ###### Parameters [Section titled “Parameters”](#parameters-2) ###### callback [Section titled “callback”](#callback-1) (`err`) => `void` ###### Returns [Section titled “Returns”](#returns-2) `void` ##### reload() [Section titled “reload()”](#reload) > **reload**(`callback`): `void` ###### Parameters [Section titled “Parameters”](#parameters-3) ###### callback [Section titled “callback”](#callback-2) (`err`) => `void` ###### Returns [Section titled “Returns”](#returns-3) `void` ##### save() [Section titled “save()”](#save) > **save**(`callback`): `void` ###### Parameters [Section titled “Parameters”](#parameters-4) ###### callback [Section titled “callback”](#callback-3) (`err`) => `void` ###### Returns [Section titled “Returns”](#returns-4) `void` ##### touch() [Section titled “touch()”](#touch) > **touch**(): `void` ###### Returns [Section titled “Returns”](#returns-5) `void` *** ### sessionID [Section titled “sessionID”](#sessionid) > **sessionID**: `string` Defined in: [src/plugins/middleware/session.ts:295](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/session.ts#L295) *** ### sessionStore [Section titled “sessionStore”](#sessionstore) > **sessionStore**: [`Store`](/api/interfaces/store/) Defined in: [src/plugins/middleware/session.ts:296](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/session.ts#L296) *** ### signal? [Section titled “signal?”](#signal-1) > `readonly` `optional` **signal**: `AbortSignal` Defined in: [src/context.ts:151](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/context.ts#L151) *** ### state [Section titled “state”](#state-2) > **state**: `State` Defined in: [src/context.ts:113](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/context.ts#L113) ## Accessors [Section titled “Accessors”](#accessors) ### headers [Section titled “headers”](#headers) #### Get Signature [Section titled “Get Signature”](#get-signature) > **get** **headers**(): `any` Defined in: [src/context.ts:299](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/context.ts#L299) Request headers ##### Returns [Section titled “Returns”](#returns-6) `any` *** ### host [Section titled “host”](#host) #### Get Signature [Section titled “Get Signature”](#get-signature-1) > **get** **host**(): `string` Defined in: [src/context.ts:273](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/context.ts#L273) Request host (e.g. “localhost:3000”) ##### Returns [Section titled “Returns”](#returns-7) `string` *** ### hostname [Section titled “hostname”](#hostname) #### Get Signature [Section titled “Get Signature”](#get-signature-2) > **get** **hostname**(): `string` Defined in: [src/context.ts:266](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/context.ts#L266) Request hostname (e.g. “localhost”) ##### Returns [Section titled “Returns”](#returns-8) `string` *** ### ip [Section titled “ip”](#ip) #### Get Signature [Section titled “Get Signature”](#get-signature-3) > **get** **ip**(): `SocketAddress` Defined in: [src/context.ts:261](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/context.ts#L261) Client IP address ##### Returns [Section titled “Returns”](#returns-9) `SocketAddress` *** ### method [Section titled “method”](#method) #### Get Signature [Section titled “Get Signature”](#get-signature-4) > **get** **method**(): `any` Defined in: [src/context.ts:188](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/context.ts#L188) HTTP method ##### Returns [Section titled “Returns”](#returns-10) `any` *** ### origin [Section titled “origin”](#origin) #### Get Signature [Section titled “Get Signature”](#get-signature-5) > **get** **origin**(): `string` Defined in: [src/context.ts:292](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/context.ts#L292) Request origin (e.g. “”) ##### Returns [Section titled “Returns”](#returns-11) `string` *** ### path [Section titled “path”](#path) #### Get Signature [Section titled “Get Signature”](#get-signature-6) > **get** **path**(): `any` Defined in: [src/context.ts:192](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/context.ts#L192) Request path ##### Returns [Section titled “Returns”](#returns-12) `any` *** ### protocol [Section titled “protocol”](#protocol) #### Get Signature [Section titled “Get Signature”](#get-signature-7) > **get** **protocol**(): `string` Defined in: [src/context.ts:280](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/context.ts#L280) Request protocol (e.g. “http:”, “https:“) ##### Returns [Section titled “Returns”](#returns-13) `string` *** ### query [Section titled “query”](#query) #### Get Signature [Section titled “Get Signature”](#get-signature-8) > **get** **query**(): `Record`<`string`, `any`> Defined in: [src/context.ts:227](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/context.ts#L227) Request query params ##### Returns [Section titled “Returns”](#returns-14) `Record`<`string`, `any`> *** ### req [Section titled “req”](#req) #### Get Signature [Section titled “Get Signature”](#get-signature-9) > **get** **req**(): `any` Defined in: [src/context.ts:184](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/context.ts#L184) Base request ##### Returns [Section titled “Returns”](#returns-15) `any` *** ### res [Section titled “res”](#res) #### Get Signature [Section titled “Get Signature”](#get-signature-10) > **get** **res**(): [`ShokupanResponse`](/api/classes/shokupanresponse/) Defined in: [src/context.ts:310](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/context.ts#L310) Base response object ##### Returns [Section titled “Returns”](#returns-16) [`ShokupanResponse`](/api/classes/shokupanresponse/) *** ### secure [Section titled “secure”](#secure) #### Get Signature [Section titled “Get Signature”](#get-signature-11) > **get** **secure**(): `boolean` Defined in: [src/context.ts:287](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/context.ts#L287) Whether request is secure (https) ##### Returns [Section titled “Returns”](#returns-17) `boolean` *** ### url [Section titled “url”](#url) #### Get Signature [Section titled “Get Signature”](#get-signature-12) > **get** **url**(): `URL` Defined in: [src/context.ts:172](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/context.ts#L172) ##### Returns [Section titled “Returns”](#returns-18) `URL` ## Methods [Section titled “Methods”](#methods) ### body() [Section titled “body()”](#body) > **body**<`T`>(): `Promise`<`T`> Defined in: [src/context.ts:406](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/context.ts#L406) Read request body with caching to avoid double parsing. The body is only parsed once and cached for subsequent reads. #### Type Parameters [Section titled “Type Parameters”](#type-parameters-1) ##### T [Section titled “T”](#t) `T` = `any` #### Returns [Section titled “Returns”](#returns-19) `Promise`<`T`> *** ### file() [Section titled “file()”](#file) > **file**(`path`, `fileOptions?`, `responseOptions?`): `Promise`<`Response`> Defined in: [src/context.ts:663](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/context.ts#L663) Respond with a file #### Parameters [Section titled “Parameters”](#parameters-5) ##### path [Section titled “path”](#path-1) `string` ##### fileOptions? [Section titled “fileOptions?”](#fileoptions) `BlobPropertyBag` ##### responseOptions? [Section titled “responseOptions?”](#responseoptions) `ResponseInit` #### Returns [Section titled “Returns”](#returns-20) `Promise`<`Response`> *** ### get() [Section titled “get()”](#get) > **get**(`name`): `any` Defined in: [src/context.ts:305](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/context.ts#L305) Get a request header #### Parameters [Section titled “Parameters”](#parameters-6) ##### name [Section titled “name”](#name) `string` Header name #### Returns [Section titled “Returns”](#returns-21) `any` *** ### html() [Section titled “html()”](#html) > **html**(`html`, `status?`, `headers?`): `Response` Defined in: [src/context.ts:612](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/context.ts#L612) Respond with HTML content #### Parameters [Section titled “Parameters”](#parameters-7) ##### html [Section titled “html”](#html-1) `string` ##### status? [Section titled “status?”](#status) `number` ##### headers? [Section titled “headers?”](#headers-1) [`HeadersInit`](/api/type-aliases/headersinit/) #### Returns [Section titled “Returns”](#returns-22) `Response` *** ### json() [Section titled “json()”](#json) > **json**(`data`, `status?`, `headers?`): `Response` Defined in: [src/context.ts:551](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/context.ts#L551) Respond with a JSON object #### Parameters [Section titled “Parameters”](#parameters-8) ##### data [Section titled “data”](#data) `any` ##### status? [Section titled “status?”](#status-1) `number` ##### headers? [Section titled “headers?”](#headers-2) [`HeadersInit`](/api/type-aliases/headersinit/) #### Returns [Section titled “Returns”](#returns-23) `Response` *** ### jsx() [Section titled “jsx()”](#jsx) > **jsx**(`element`, `args?`, `status?`, `headers?`): `Promise`<`Response`> Defined in: [src/context.ts:695](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/context.ts#L695) Render a JSX element #### Parameters [Section titled “Parameters”](#parameters-9) ##### element [Section titled “element”](#element) `any` JSX Element ##### args? [Section titled “args?”](#args) `unknown` ##### status? [Section titled “status?”](#status-2) `number` HTTP Status ##### headers? [Section titled “headers?”](#headers-3) [`HeadersInit`](/api/type-aliases/headersinit/) HTTP Headers #### Returns [Section titled “Returns”](#returns-24) `Promise`<`Response`> *** ### parseBody() [Section titled “parseBody()”](#parsebody) > **parseBody**(): `Promise`<`void`> Defined in: [src/context.ts:463](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/context.ts#L463) Pre-parse the request body before handler execution. This improves performance and enables Node.js compatibility for large payloads. Errors are deferred until the body is actually accessed in the handler. #### Returns [Section titled “Returns”](#returns-25) `Promise`<`void`> *** ### redirect() [Section titled “redirect()”](#redirect) > **redirect**(`url`, `status`): `Response` Defined in: [src/context.ts:633](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/context.ts#L633) Respond with a redirect #### Parameters [Section titled “Parameters”](#parameters-10) ##### url [Section titled “url”](#url-1) `string` ##### status [Section titled “status”](#status-3) `number` = `302` #### Returns [Section titled “Returns”](#returns-26) `Response` *** ### send() [Section titled “send()”](#send) > **send**(`body?`, `options?`): `Response` Defined in: [src/context.ts:530](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/context.ts#L530) Send a response #### Parameters [Section titled “Parameters”](#parameters-11) ##### body? [Section titled “body?”](#body-1) `BodyInit` Response body ##### options? [Section titled “options?”](#options) `ResponseInit` Response options #### Returns [Section titled “Returns”](#returns-27) `Response` Response *** ### set() [Section titled “set()”](#set) > **set**(`key`, `value`): `ShokupanContext`<`State`, `Params`> Defined in: [src/context.ts:317](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/context.ts#L317) Helper to set a header on the response #### Parameters [Section titled “Parameters”](#parameters-12) ##### key [Section titled “key”](#key) `string` Header key ##### value [Section titled “value”](#value) `string` Header value #### Returns [Section titled “Returns”](#returns-28) `ShokupanContext`<`State`, `Params`> *** ### setCookie() [Section titled “setCookie()”](#setcookie) > **setCookie**(`name`, `value`, `options`): `ShokupanContext`<`State`, `Params`> Defined in: [src/context.ts:328](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/context.ts#L328) Set a cookie #### Parameters [Section titled “Parameters”](#parameters-13) ##### name [Section titled “name”](#name-1) `string` Cookie name ##### value [Section titled “value”](#value-1) `string` Cookie value ##### options [Section titled “options”](#options-1) [`CookieOptions`](/api/interfaces/cookieoptions/) = `{}` Cookie options #### Returns [Section titled “Returns”](#returns-29) `ShokupanContext`<`State`, `Params`> *** ### setRenderer() [Section titled “setRenderer()”](#setrenderer) > **setRenderer**(`renderer`): `void` Defined in: [src/context.ts:142](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/context.ts#L142) #### Parameters [Section titled “Parameters”](#parameters-14) ##### renderer [Section titled “renderer”](#renderer) [`JSXRenderer`](/api/type-aliases/jsxrenderer/) #### Returns [Section titled “Returns”](#returns-30) `void` *** ### status() [Section titled “status()”](#status-4) > **status**(`status`): `Response` Defined in: [src/context.ts:649](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/context.ts#L649) Respond with a status code DOES NOT CHAIN! #### Parameters [Section titled “Parameters”](#parameters-15) ##### status [Section titled “status”](#status-5) `number` #### Returns [Section titled “Returns”](#returns-31) `Response` *** ### text() [Section titled “text()”](#text) > **text**(`data`, `status?`, `headers?`): `Response` Defined in: [src/context.ts:582](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/context.ts#L582) Respond with a text string #### Parameters [Section titled “Parameters”](#parameters-16) ##### data [Section titled “data”](#data-1) `string` ##### status? [Section titled “status?”](#status-6) `number` ##### headers? [Section titled “headers?”](#headers-4) [`HeadersInit`](/api/type-aliases/headersinit/) #### Returns [Section titled “Returns”](#returns-32) `Response`
# ShokupanResponse
Defined in: [src/util/response.ts:6](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/response.ts#L6) Custom response class to handle response state (headers, status) before the actual Response object is created. ## Constructors [Section titled “Constructors”](#constructors) ### Constructor [Section titled “Constructor”](#constructor) > **new ShokupanResponse**(): `ShokupanResponse` #### Returns [Section titled “Returns”](#returns) `ShokupanResponse` ## Accessors [Section titled “Accessors”](#accessors) ### hasPopulatedHeaders [Section titled “hasPopulatedHeaders”](#haspopulatedheaders) #### Get Signature [Section titled “Get Signature”](#get-signature) > **get** **hasPopulatedHeaders**(): `boolean` Defined in: [src/util/response.ts:73](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/response.ts#L73) Internal: check if headers have been initialized/modified ##### Returns [Section titled “Returns”](#returns-1) `boolean` *** ### headers [Section titled “headers”](#headers) #### Get Signature [Section titled “Get Signature”](#get-signature-1) > **get** **headers**(): `Headers` Defined in: [src/util/response.ts:13](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/response.ts#L13) Get the current headers ##### Returns [Section titled “Returns”](#returns-2) `Headers` *** ### status [Section titled “status”](#status) #### Get Signature [Section titled “Get Signature”](#get-signature-2) > **get** **status**(): `number` Defined in: [src/util/response.ts:21](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/response.ts#L21) Get the current status code ##### Returns [Section titled “Returns”](#returns-3) `number` #### Set Signature [Section titled “Set Signature”](#set-signature) > **set** **status**(`code`): `void` Defined in: [src/util/response.ts:28](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/response.ts#L28) Set the status code ##### Parameters [Section titled “Parameters”](#parameters) ###### code [Section titled “code”](#code) `number` ##### Returns [Section titled “Returns”](#returns-4) `void` ## Methods [Section titled “Methods”](#methods) ### append() [Section titled “append()”](#append) > **append**(`key`, `value`): `ShokupanResponse` Defined in: [src/util/response.ts:48](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/response.ts#L48) Append to a response header #### Parameters [Section titled “Parameters”](#parameters-1) ##### key [Section titled “key”](#key) `string` Header name ##### value [Section titled “value”](#value) `string` Header value #### Returns [Section titled “Returns”](#returns-5) `ShokupanResponse` *** ### get() [Section titled “get()”](#get) > **get**(`key`): `string` Defined in: [src/util/response.ts:58](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/response.ts#L58) Get a response header value #### Parameters [Section titled “Parameters”](#parameters-2) ##### key [Section titled “key”](#key-1) `string` Header name #### Returns [Section titled “Returns”](#returns-6) `string` *** ### has() [Section titled “has()”](#has) > **has**(`key`): `boolean` Defined in: [src/util/response.ts:66](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/response.ts#L66) Check if a header exists #### Parameters [Section titled “Parameters”](#parameters-3) ##### key [Section titled “key”](#key-2) `string` Header name #### Returns [Section titled “Returns”](#returns-7) `boolean` *** ### set() [Section titled “set()”](#set) > **set**(`key`, `value`): `ShokupanResponse` Defined in: [src/util/response.ts:37](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/response.ts#L37) Set a response header #### Parameters [Section titled “Parameters”](#parameters-4) ##### key [Section titled “key”](#key-3) `string` Header name ##### value [Section titled “value”](#value-1) `string` Header value #### Returns [Section titled “Returns”](#returns-8) `ShokupanResponse`
# ValidationError
Defined in: [src/plugins/middleware/validation.ts:14](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/validation.ts#L14) ## Extends [Section titled “Extends”](#extends) * `Error` ## Constructors [Section titled “Constructors”](#constructors) ### Constructor [Section titled “Constructor”](#constructor) > **new ValidationError**(`errors`): `ValidationError` Defined in: [src/plugins/middleware/validation.ts:16](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/validation.ts#L16) #### Parameters [Section titled “Parameters”](#parameters) ##### errors [Section titled “errors”](#errors) `any`\[] #### Returns [Section titled “Returns”](#returns) `ValidationError` #### Overrides [Section titled “Overrides”](#overrides) `Error.constructor` ## Properties [Section titled “Properties”](#properties) ### cause? [Section titled “cause?”](#cause) > `optional` **cause**: `unknown` Defined in: docs/node\_modules/typescript/lib/lib.es2022.error.d.ts:26 The cause of the error. #### Inherited from [Section titled “Inherited from”](#inherited-from) `Error.cause` *** ### errors [Section titled “errors”](#errors-1) > **errors**: `any`\[] Defined in: [src/plugins/middleware/validation.ts:16](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/validation.ts#L16) *** ### message [Section titled “message”](#message) > **message**: `string` Defined in: docs/node\_modules/typescript/lib/lib.es5.d.ts:1077 #### Inherited from [Section titled “Inherited from”](#inherited-from-1) `Error.message` *** ### name [Section titled “name”](#name) > **name**: `string` Defined in: docs/node\_modules/typescript/lib/lib.es5.d.ts:1076 #### Inherited from [Section titled “Inherited from”](#inherited-from-2) `Error.name` *** ### stack? [Section titled “stack?”](#stack) > `optional` **stack**: `string` Defined in: docs/node\_modules/typescript/lib/lib.es5.d.ts:1078 #### Inherited from [Section titled “Inherited from”](#inherited-from-3) `Error.stack` *** ### status [Section titled “status”](#status) > **status**: `number` = `400` Defined in: [src/plugins/middleware/validation.ts:15](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/validation.ts#L15) *** ### stackTraceLimit [Section titled “stackTraceLimit”](#stacktracelimit) > `static` **stackTraceLimit**: `number` Defined in: node\_modules/@types/node/globals.d.ts:68 The `Error.stackTraceLimit` property specifies the number of stack frames collected by a stack trace (whether generated by `new Error().stack` or `Error.captureStackTrace(obj)`). The default value is `10` but may be set to any valid JavaScript number. Changes will affect any stack trace captured *after* the value has been changed. If set to a non-number value, or set to a negative number, stack traces will not capture any frames. #### Inherited from [Section titled “Inherited from”](#inherited-from-4) `Error.stackTraceLimit` ## Methods [Section titled “Methods”](#methods) ### captureStackTrace() [Section titled “captureStackTrace()”](#capturestacktrace) #### Call Signature [Section titled “Call Signature”](#call-signature) > `static` **captureStackTrace**(`targetObject`, `constructorOpt?`): `void` Defined in: node\_modules/@types/node/globals.d.ts:52 Creates a `.stack` property on `targetObject`, which when accessed returns a string representing the location in the code at which `Error.captureStackTrace()` was called. ```js const myObject = {}; Error.captureStackTrace(myObject); myObject.stack; // Similar to `new Error().stack` ``` The first line of the trace will be prefixed with `${myObject.name}: ${myObject.message}`. The optional `constructorOpt` argument accepts a function. If given, all frames above `constructorOpt`, including `constructorOpt`, will be omitted from the generated stack trace. The `constructorOpt` argument is useful for hiding implementation details of error generation from the user. For instance: ```js function a() { b(); } function b() { c(); } function c() { // Create an error without stack trace to avoid calculating the stack trace twice. const { stackTraceLimit } = Error; Error.stackTraceLimit = 0; const error = new Error(); Error.stackTraceLimit = stackTraceLimit; // Capture the stack trace above function b Error.captureStackTrace(error, b); // Neither function c, nor b is included in the stack trace throw error; } a(); ``` ##### Parameters [Section titled “Parameters”](#parameters-1) ###### targetObject [Section titled “targetObject”](#targetobject) `object` ###### constructorOpt? [Section titled “constructorOpt?”](#constructoropt) `Function` ##### Returns [Section titled “Returns”](#returns-1) `void` ##### Inherited from [Section titled “Inherited from”](#inherited-from-5) `Error.captureStackTrace` #### Call Signature [Section titled “Call Signature”](#call-signature-1) > `static` **captureStackTrace**(`targetObject`, `constructorOpt?`): `void` Defined in: node\_modules/bun-types/globals.d.ts:985 Create .stack property on a target object ##### Parameters [Section titled “Parameters”](#parameters-2) ###### targetObject [Section titled “targetObject”](#targetobject-1) `object` ###### constructorOpt? [Section titled “constructorOpt?”](#constructoropt-1) `Function` ##### Returns [Section titled “Returns”](#returns-2) `void` ##### Inherited from [Section titled “Inherited from”](#inherited-from-6) `Error.captureStackTrace` *** ### isError() [Section titled “isError()”](#iserror) #### Call Signature [Section titled “Call Signature”](#call-signature-2) > `static` **isError**(`error`): `error is Error` Defined in: docs/node\_modules/typescript/lib/lib.esnext.error.d.ts:23 Indicates whether the argument provided is a built-in Error instance or not. ##### Parameters [Section titled “Parameters”](#parameters-3) ###### error [Section titled “error”](#error) `unknown` ##### Returns [Section titled “Returns”](#returns-3) `error is Error` ##### Inherited from [Section titled “Inherited from”](#inherited-from-7) `Error.isError` #### Call Signature [Section titled “Call Signature”](#call-signature-3) > `static` **isError**(`value`): `value is Error` Defined in: node\_modules/bun-types/globals.d.ts:980 Check if a value is an instance of Error ##### Parameters [Section titled “Parameters”](#parameters-4) ###### value [Section titled “value”](#value) `unknown` The value to check ##### Returns [Section titled “Returns”](#returns-4) `value is Error` True if the value is an instance of Error, false otherwise ##### Inherited from [Section titled “Inherited from”](#inherited-from-8) `Error.isError` *** ### prepareStackTrace() [Section titled “prepareStackTrace()”](#preparestacktrace) > `static` **prepareStackTrace**(`err`, `stackTraces`): `any` Defined in: node\_modules/@types/node/globals.d.ts:56 #### Parameters [Section titled “Parameters”](#parameters-5) ##### err [Section titled “err”](#err) `Error` ##### stackTraces [Section titled “stackTraces”](#stacktraces) `CallSite`\[] #### Returns [Section titled “Returns”](#returns-5) `any` #### See [Section titled “See”](#see) #### Inherited from [Section titled “Inherited from”](#inherited-from-9) `Error.prepareStackTrace`
# RouteParamType
Defined in: [src/util/types.ts:116](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L116) ## Enumeration Members [Section titled “Enumeration Members”](#enumeration-members) ### BODY [Section titled “BODY”](#body) > **BODY**: `"BODY"` Defined in: [src/util/types.ts:117](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L117) *** ### CONTEXT [Section titled “CONTEXT”](#context) > **CONTEXT**: `"CONTEXT"` Defined in: [src/util/types.ts:122](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L122) *** ### HEADER [Section titled “HEADER”](#header) > **HEADER**: `"HEADER"` Defined in: [src/util/types.ts:120](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L120) *** ### PARAM [Section titled “PARAM”](#param) > **PARAM**: `"PARAM"` Defined in: [src/util/types.ts:118](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L118) *** ### QUERY [Section titled “QUERY”](#query) > **QUERY**: `"QUERY"` Defined in: [src/util/types.ts:119](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L119) *** ### REQUEST [Section titled “REQUEST”](#request) > **REQUEST**: `"REQUEST"` Defined in: [src/util/types.ts:121](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L121)
# compileValidators
> **compileValidators**(`spec`): `object` Defined in: [src/plugins/middleware/openapi-validator.ts:127](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/openapi-validator.ts#L127) ## Parameters [Section titled “Parameters”](#parameters) ### spec [Section titled “spec”](#spec) `any` ## Returns [Section titled “Returns”](#returns) `object` ### paths [Section titled “paths”](#paths) > **paths**: `Map`<`string`, { `paramNames`: `string`\[]; `regex`: `RegExp`; }> ### validators [Section titled “validators”](#validators) > **validators**: `ValidatorCache`
# compose
> **compose**(`middleware`): (`context`, `next?`) => `Promise`<`any`> Defined in: [src/middleware.ts:10](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/middleware.ts#L10) Composes a list of middleware into a single function. This is the onion model (Koa-style). CRITICAL: This must build the chain ONCE, not rebuild it on every request. ## Parameters [Section titled “Parameters”](#parameters) ### middleware [Section titled “middleware”](#middleware) [`Middleware`](/api/type-aliases/middleware/)\[] ## Returns [Section titled “Returns”](#returns) > (`context`, `next?`): `Promise`<`any`> ### Parameters [Section titled “Parameters”](#parameters-1) #### context [Section titled “context”](#context) [`ShokupanContext`](/api/classes/shokupancontext/)<`unknown`> #### next? [Section titled “next?”](#next) [`NextFn`](/api/type-aliases/nextfn/) ### Returns [Section titled “Returns”](#returns-1) `Promise`<`any`>
# Compression
> **Compression**(`options`): [`Middleware`](/api/type-aliases/middleware/) Defined in: [src/plugins/middleware/compression.ts:21](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/compression.ts#L21) Compression middleware. ## Parameters [Section titled “Parameters”](#parameters) ### options [Section titled “options”](#options) [`CompressionOptions`](/api/interfaces/compressionoptions/) = `{}` Compression options ## Returns [Section titled “Returns”](#returns) [`Middleware`](/api/type-aliases/middleware/) Middleware function
# Controller
> **Controller**(`path`): (`target`) => `void` Defined in: [src/util/decorators.ts:9](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/decorators.ts#L9) Class Decorator: Defines the base path for a controller. ## Parameters [Section titled “Parameters”](#parameters) ### path [Section titled “path”](#path) `string` = `"/"` ## Returns [Section titled “Returns”](#returns) > (`target`): `void` ### Parameters [Section titled “Parameters”](#parameters-1) #### target [Section titled “target”](#target) `any` ### Returns [Section titled “Returns”](#returns-1) `void`
# Cors
> **Cors**(`options`): [`Middleware`](/api/type-aliases/middleware/) Defined in: [src/plugins/middleware/cors.ts:36](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/cors.ts#L36) CORS middleware. ## Parameters [Section titled “Parameters”](#parameters) ### options [Section titled “options”](#options) [`CorsOptions`](/api/interfaces/corsoptions/) = `{}` CORS options ## Returns [Section titled “Returns”](#returns) [`Middleware`](/api/type-aliases/middleware/) Middleware function
# enableOpenApiValidation
> **enableOpenApiValidation**(`app`): `void` Defined in: [src/plugins/middleware/openapi-validator.ts:234](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/openapi-validator.ts#L234) Enables OpenAPI validation for the application. This registers the middleware and the hook to pre-compile validators when the spec is generated. ## Parameters [Section titled “Parameters”](#parameters) ### app [Section titled “app”](#app) [`Shokupan`](/api/classes/shokupan/)<`any`> The Shokupan application instance ## Returns [Section titled “Returns”](#returns) `void`
# Inject
> **Inject**(`token`): (`target`, `key`) => `void` Defined in: [src/util/di.ts:47](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/di.ts#L47) Property Decorator: Injects a service. ## Parameters [Section titled “Parameters”](#parameters) ### token [Section titled “token”](#token) `any` ## Returns [Section titled “Returns”](#returns) > (`target`, `key`): `void` ### Parameters [Section titled “Parameters”](#parameters-1) #### target [Section titled “target”](#target) `any` #### key [Section titled “key”](#key) `string` ### Returns [Section titled “Returns”](#returns-1) `void`
# Injectable
> **Injectable**(): (`target`) => `void` Defined in: [src/util/di.ts:38](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/di.ts#L38) Decorator to mark a class as injectable (Service). ## Returns [Section titled “Returns”](#returns) > (`target`): `void` ### Parameters [Section titled “Parameters”](#parameters) #### target [Section titled “target”](#target) `any` ### Returns [Section titled “Returns”](#returns-1) `void`
# openApiValidator
> **openApiValidator**(): [`Middleware`](/api/type-aliases/middleware/) Defined in: [src/plugins/middleware/openapi-validator.ts:26](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/openapi-validator.ts#L26) ## Returns [Section titled “Returns”](#returns) [`Middleware`](/api/type-aliases/middleware/)
# precompileValidators
> **precompileValidators**(`app`, `spec`): `void` Defined in: [src/plugins/middleware/openapi-validator.ts:223](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/openapi-validator.ts#L223) Pre-compiles validators for the application using the provided spec. Should be called when the spec is available. ## Parameters [Section titled “Parameters”](#parameters) ### app [Section titled “app”](#app) `any` ### spec [Section titled “spec”](#spec) `any` ## Returns [Section titled “Returns”](#returns) `void`
# RateLimit
> **RateLimit**(`options`): (`target`, `propertyKey?`, `descriptor?`) => `void` Defined in: [src/util/decorators.ts:160](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/decorators.ts#L160) Decorator: Applies a rate limit to a class or method. ## Parameters [Section titled “Parameters”](#parameters) ### options [Section titled “options”](#options) [`RateLimitOptions`](/api/interfaces/ratelimitoptions/) ## Returns [Section titled “Returns”](#returns) > (`target`, `propertyKey?`, `descriptor?`): `void` ### Parameters [Section titled “Parameters”](#parameters-1) #### target [Section titled “target”](#target) `any` #### propertyKey? [Section titled “propertyKey?”](#propertykey) `string` #### descriptor? [Section titled “descriptor?”](#descriptor) `PropertyDescriptor` ### Returns [Section titled “Returns”](#returns-1) `void`
# RateLimitMiddleware
> **RateLimitMiddleware**(`options`): [`Middleware`](/api/type-aliases/middleware/) Defined in: [src/plugins/middleware/rate-limit.ts:65](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/rate-limit.ts#L65) Rate limit middleware. ## Parameters [Section titled “Parameters”](#parameters) ### options [Section titled “options”](#options) [`RateLimitOptions`](/api/interfaces/ratelimitoptions/) = `{}` Rate limit options ## Returns [Section titled “Returns”](#returns) [`Middleware`](/api/type-aliases/middleware/) Middleware function
# SecurityHeaders
> **SecurityHeaders**(`options`): [`Middleware`](/api/type-aliases/middleware/) Defined in: [src/plugins/middleware/security-headers.ts:72](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/security-headers.ts#L72) Security headers middleware. ## Parameters [Section titled “Parameters”](#parameters) ### options [Section titled “options”](#options) [`SecurityHeadersOptions`](/api/interfaces/securityheadersoptions/) = `{}` Security headers options ## Returns [Section titled “Returns”](#returns) [`Middleware`](/api/type-aliases/middleware/) Middleware function
# Session
> **Session**(`options`): [`Middleware`](/api/type-aliases/middleware/) Defined in: [src/plugins/middleware/session.ts:305](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/session.ts#L305) Session middleware. ## Parameters [Section titled “Parameters”](#parameters) ### options [Section titled “options”](#options) [`SessionOptions`](/api/interfaces/sessionoptions/) Session options ## Returns [Section titled “Returns”](#returns) [`Middleware`](/api/type-aliases/middleware/) Middleware function
# Spec
> **Spec**(`spec`): (`target`, `propertyKey`, `descriptor`) => `void` Defined in: [src/util/decorators.ts:90](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/decorators.ts#L90) Decorator: Overrides the OpenAPI specification for a route. ## Parameters [Section titled “Parameters”](#parameters) ### spec [Section titled “spec”](#spec) [`MethodAPISpec`](/api/type-aliases/methodapispec/) | [`GuardAPISpec`](/api/type-aliases/guardapispec/) ## Returns [Section titled “Returns”](#returns) > (`target`, `propertyKey`, `descriptor`): `void` ### Parameters [Section titled “Parameters”](#parameters-1) #### target [Section titled “target”](#target) `any` #### propertyKey [Section titled “propertyKey”](#propertykey) `string` #### descriptor [Section titled “descriptor”](#descriptor) `PropertyDescriptor` ### Returns [Section titled “Returns”](#returns-1) `void`
# Use
> **Use**(…`middleware`): (`target`, `propertyKey?`, `descriptor?`) => `void` Defined in: [src/util/decorators.ts:18](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/decorators.ts#L18) Decorator: Applies middleware to a class or method. ## Parameters [Section titled “Parameters”](#parameters) ### middleware [Section titled “middleware”](#middleware) …[`Middleware`](/api/type-aliases/middleware/)\[] ## Returns [Section titled “Returns”](#returns) > (`target`, `propertyKey?`, `descriptor?`): `void` ### Parameters [Section titled “Parameters”](#parameters-1) #### target [Section titled “target”](#target) `any` #### propertyKey? [Section titled “propertyKey?”](#propertykey) `string` #### descriptor? [Section titled “descriptor?”](#descriptor) `PropertyDescriptor` ### Returns [Section titled “Returns”](#returns-1) `void`
# useExpress
> **useExpress**(`expressMiddleware`): [`Middleware`](/api/type-aliases/middleware/) Defined in: [src/plugins/middleware/express.ts:7](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/express.ts#L7) Adapter to use legacy Express middleware. NOTE: This provides a PARTIAL mock of req/res. ## Parameters [Section titled “Parameters”](#parameters) ### expressMiddleware [Section titled “expressMiddleware”](#expressmiddleware) `any` ## Returns [Section titled “Returns”](#returns) [`Middleware`](/api/type-aliases/middleware/)
# valibot
> **valibot**(`schema`, `parser`): `object` Defined in: [src/plugins/middleware/validation.ts:58](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/validation.ts#L58) ## Parameters [Section titled “Parameters”](#parameters) ### schema [Section titled “schema”](#schema) `any` ### parser [Section titled “parser”](#parser) `Function` ## Returns [Section titled “Returns”](#returns) `object` ### \_valibot [Section titled “\_valibot”](#_valibot) > **\_valibot**: `boolean` = `true` ### parser [Section titled “parser”](#parser-1) > **parser**: `Function` ### schema [Section titled “schema”](#schema-1) > **schema**: `any`
# validate
> **validate**(`config`): [`Middleware`](/api/type-aliases/middleware/) Defined in: [src/plugins/middleware/validation.ts:179](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/validation.ts#L179) Validation middleware. ## Parameters [Section titled “Parameters”](#parameters) ### config [Section titled “config”](#config) [`ValidationConfig`](/api/interfaces/validationconfig/) Validation configuration ## Returns [Section titled “Returns”](#returns) [`Middleware`](/api/type-aliases/middleware/) Middleware function
# AuthConfig
Defined in: [src/plugins/application/auth.ts:72](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/application/auth.ts#L72) ## Properties [Section titled “Properties”](#properties) ### cookieOptions? [Section titled “cookieOptions?”](#cookieoptions) > `optional` **cookieOptions**: `object` Defined in: [src/plugins/application/auth.ts:84](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/application/auth.ts#L84) Cookie options #### httpOnly? [Section titled “httpOnly?”](#httponly) > `optional` **httpOnly**: `boolean` HTTP only #### maxAge? [Section titled “maxAge?”](#maxage) > `optional` **maxAge**: `number` Max age #### path? [Section titled “path?”](#path) > `optional` **path**: `string` Path #### sameSite? [Section titled “sameSite?”](#samesite) > `optional` **sameSite**: `"Lax"` | `"Strict"` | `"None"` Same site #### secure? [Section titled “secure?”](#secure) > `optional` **secure**: `boolean` Secure *** ### jwtExpiration? [Section titled “jwtExpiration?”](#jwtexpiration) > `optional` **jwtExpiration**: `string` Defined in: [src/plugins/application/auth.ts:80](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/application/auth.ts#L80) JWT expiration *** ### jwtSecret [Section titled “jwtSecret”](#jwtsecret) > **jwtSecret**: `string` | `Uint8Array`<`ArrayBufferLike`> Defined in: [src/plugins/application/auth.ts:76](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/application/auth.ts#L76) JWT secret *** ### onSuccess()? [Section titled “onSuccess()?”](#onsuccess) > `optional` **onSuccess**: (`user`, `ctx`) => `any` Defined in: [src/plugins/application/auth.ts:109](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/application/auth.ts#L109) Success callback #### Parameters [Section titled “Parameters”](#parameters) ##### user [Section titled “user”](#user) [`AuthUser`](/api/interfaces/authuser/) ##### ctx [Section titled “ctx”](#ctx) [`ShokupanContext`](/api/classes/shokupancontext/) #### Returns [Section titled “Returns”](#returns) `any` *** ### providers [Section titled “providers”](#providers) > **providers**: `object` Defined in: [src/plugins/application/auth.ts:113](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/application/auth.ts#L113) Providers #### Index Signature [Section titled “Index Signature”](#index-signature) \[`key`: `string`]: [`ProviderConfig`](/api/interfaces/providerconfig/) #### apple? [Section titled “apple?”](#apple) > `optional` **apple**: [`ProviderConfig`](/api/interfaces/providerconfig/) #### auth0? [Section titled “auth0?”](#auth0) > `optional` **auth0**: [`ProviderConfig`](/api/interfaces/providerconfig/) #### github? [Section titled “github?”](#github) > `optional` **github**: [`ProviderConfig`](/api/interfaces/providerconfig/) #### google? [Section titled “google?”](#google) > `optional` **google**: [`ProviderConfig`](/api/interfaces/providerconfig/) #### microsoft? [Section titled “microsoft?”](#microsoft) > `optional` **microsoft**: [`ProviderConfig`](/api/interfaces/providerconfig/) #### oauth2? [Section titled “oauth2?”](#oauth2) > `optional` **oauth2**: [`ProviderConfig`](/api/interfaces/providerconfig/) #### okta? [Section titled “okta?”](#okta) > `optional` **okta**: [`ProviderConfig`](/api/interfaces/providerconfig/)
# AuthUser
Defined in: [src/plugins/application/auth.ts:16](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/application/auth.ts#L16) ## Properties [Section titled “Properties”](#properties) ### email? [Section titled “email?”](#email) > `optional` **email**: `string` Defined in: [src/plugins/application/auth.ts:18](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/application/auth.ts#L18) *** ### id [Section titled “id”](#id) > **id**: `string` Defined in: [src/plugins/application/auth.ts:17](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/application/auth.ts#L17) *** ### name? [Section titled “name?”](#name) > `optional` **name**: `string` Defined in: [src/plugins/application/auth.ts:19](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/application/auth.ts#L19) *** ### picture? [Section titled “picture?”](#picture) > `optional` **picture**: `string` Defined in: [src/plugins/application/auth.ts:20](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/application/auth.ts#L20) *** ### provider [Section titled “provider”](#provider) > **provider**: `string` Defined in: [src/plugins/application/auth.ts:21](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/application/auth.ts#L21) *** ### raw? [Section titled “raw?”](#raw) > `optional` **raw**: `any` Defined in: [src/plugins/application/auth.ts:22](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/application/auth.ts#L22)
# ClusterOptions
Defined in: [src/plugins/application/cluster.ts:7](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/application/cluster.ts#L7) ## Properties [Section titled “Properties”](#properties) ### silent? [Section titled “silent?”](#silent) > `optional` **silent**: `boolean` Defined in: [src/plugins/application/cluster.ts:19](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/application/cluster.ts#L19) Whether to pipe stdout/stderr to the parent process. #### Default [Section titled “Default”](#default) ```ts false ``` *** ### sticky? [Section titled “sticky?”](#sticky) > `optional` **sticky**: `boolean` Defined in: [src/plugins/application/cluster.ts:26](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/application/cluster.ts#L26) Enable sticky sessions (useful for Socket.io). Currently only supported in Node.js runtime. #### Default [Section titled “Default”](#default-1) ```ts false ``` *** ### workers? [Section titled “workers?”](#workers) > `optional` **workers**: `number` | `"auto"` Defined in: [src/plugins/application/cluster.ts:13](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/application/cluster.ts#L13) Number of workers to spawn. Set to -1 or ‘auto’ to spawn one worker per available CPU. #### Default [Section titled “Default”](#default-2) ```ts 'auto' ```
# CompressionOptions
Defined in: [src/plugins/middleware/compression.ts:5](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/compression.ts#L5) ## Properties [Section titled “Properties”](#properties) ### allowedAlgorithms? [Section titled “allowedAlgorithms?”](#allowedalgorithms) > `optional` **allowedAlgorithms**: `string`\[] Defined in: [src/plugins/middleware/compression.ts:13](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/compression.ts#L13) Allowed algorithms *** ### threshold? [Section titled “threshold?”](#threshold) > `optional` **threshold**: `number` Defined in: [src/plugins/middleware/compression.ts:9](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/compression.ts#L9) Minimum byte size to compress
# CookieOptions
Defined in: [src/util/types.ts:97](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L97) ## Properties [Section titled “Properties”](#properties) ### domain? [Section titled “domain?”](#domain) > `optional` **domain**: `string` Defined in: [src/util/types.ts:102](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L102) *** ### expires? [Section titled “expires?”](#expires) > `optional` **expires**: `Date` Defined in: [src/util/types.ts:99](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L99) *** ### httpOnly? [Section titled “httpOnly?”](#httponly) > `optional` **httpOnly**: `boolean` Defined in: [src/util/types.ts:100](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L100) *** ### maxAge? [Section titled “maxAge?”](#maxage) > `optional` **maxAge**: `number` Defined in: [src/util/types.ts:98](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L98) *** ### path? [Section titled “path?”](#path) > `optional` **path**: `string` Defined in: [src/util/types.ts:103](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L103) *** ### priority? [Section titled “priority?”](#priority) > `optional` **priority**: `"low"` | `"medium"` | `"high"` | `"Low"` | `"Medium"` | `"High"` Defined in: [src/util/types.ts:105](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L105) *** ### sameSite? [Section titled “sameSite?”](#samesite) > `optional` **sameSite**: `boolean` | `"lax"` | `"strict"` | `"none"` | `"Lax"` | `"Strict"` | `"None"` Defined in: [src/util/types.ts:104](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L104) *** ### secure? [Section titled “secure?”](#secure) > `optional` **secure**: `boolean` Defined in: [src/util/types.ts:101](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L101)
# CorsOptions
Defined in: [src/plugins/middleware/cors.ts:4](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/cors.ts#L4) ## Properties [Section titled “Properties”](#properties) ### allowedHeaders? [Section titled “allowedHeaders?”](#allowedheaders) > `optional` **allowedHeaders**: `string` | `string`\[] Defined in: [src/plugins/middleware/cors.ts:16](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/cors.ts#L16) HTTP headers to allow. *** ### credentials? [Section titled “credentials?”](#credentials) > `optional` **credentials**: `boolean` Defined in: [src/plugins/middleware/cors.ts:24](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/cors.ts#L24) Whether to allow credentials. *** ### exposedHeaders? [Section titled “exposedHeaders?”](#exposedheaders) > `optional` **exposedHeaders**: `string` | `string`\[] Defined in: [src/plugins/middleware/cors.ts:20](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/cors.ts#L20) HTTP headers to expose. *** ### maxAge? [Section titled “maxAge?”](#maxage) > `optional` **maxAge**: `number` Defined in: [src/plugins/middleware/cors.ts:28](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/cors.ts#L28) Maximum age of preflight request. *** ### methods? [Section titled “methods?”](#methods) > `optional` **methods**: `string` | `string`\[] Defined in: [src/plugins/middleware/cors.ts:12](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/cors.ts#L12) HTTP methods to allow. *** ### origin? [Section titled “origin?”](#origin) > `optional` **origin**: `string` | `string`\[] | (`ctx`) => `string` | `boolean` Defined in: [src/plugins/middleware/cors.ts:8](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/cors.ts#L8) Origin to allow. Can be a string, array of strings, or function that returns a string.
# DebugCollector
Defined in: [src/context.ts:40](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/context.ts#L40) ## Methods [Section titled “Methods”](#methods) ### getCurrentNode() [Section titled “getCurrentNode()”](#getcurrentnode) > **getCurrentNode**(): `string` Defined in: [src/context.ts:44](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/context.ts#L44) #### Returns [Section titled “Returns”](#returns) `string` *** ### setNode() [Section titled “setNode()”](#setnode) > **setNode**(`id`): `void` Defined in: [src/context.ts:43](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/context.ts#L43) #### Parameters [Section titled “Parameters”](#parameters) ##### id [Section titled “id”](#id) `string` #### Returns [Section titled “Returns”](#returns-1) `void` *** ### trackEdge() [Section titled “trackEdge()”](#trackedge) > **trackEdge**(`fromId`, `toId`): `void` Defined in: [src/context.ts:42](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/context.ts#L42) #### Parameters [Section titled “Parameters”](#parameters-1) ##### fromId [Section titled “fromId”](#fromid) `string` ##### toId [Section titled “toId”](#toid) `string` #### Returns [Section titled “Returns”](#returns-2) `void` *** ### trackStep() [Section titled “trackStep()”](#trackstep) > **trackStep**(`id`, `type`, `duration`, `status`, `error?`): `void` Defined in: [src/context.ts:41](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/context.ts#L41) #### Parameters [Section titled “Parameters”](#parameters-2) ##### id [Section titled “id”](#id-1) `string` ##### type [Section titled “type”](#type) `string` ##### duration [Section titled “duration”](#duration) `number` ##### status [Section titled “status”](#status) `"success"` | `"error"` ##### error? [Section titled “error?”](#error) `any` #### Returns [Section titled “Returns”](#returns-3) `void`
# HandlerStackItem
Defined in: [src/context.ts:31](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/context.ts#L31) ## Properties [Section titled “Properties”](#properties) ### duration? [Section titled “duration?”](#duration) > `optional` **duration**: `number` Defined in: [src/context.ts:37](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/context.ts#L37) *** ### file [Section titled “file”](#file) > **file**: `string` Defined in: [src/context.ts:33](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/context.ts#L33) *** ### line [Section titled “line”](#line) > **line**: `number` Defined in: [src/context.ts:34](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/context.ts#L34) *** ### name [Section titled “name”](#name) > **name**: `string` Defined in: [src/context.ts:32](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/context.ts#L32) *** ### startTime? [Section titled “startTime?”](#starttime) > `optional` **startTime**: `number` Defined in: [src/context.ts:36](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/context.ts#L36) *** ### stateChanges? [Section titled “stateChanges?”](#statechanges) > `optional` **stateChanges**: `Record`<`string`, `any`> Defined in: [src/context.ts:35](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/context.ts#L35)
# OpenAPIOptions
Defined in: [src/util/types.ts:74](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L74) ## Properties [Section titled “Properties”](#properties) ### components? [Section titled “components?”](#components) > `optional` **components**: `any` Defined in: [src/util/types.ts:77](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L77) *** ### defaultTag? [Section titled “defaultTag?”](#defaulttag) > `optional` **defaultTag**: `string` Defined in: [src/util/types.ts:81](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L81) *** ### defaultTagGroup? [Section titled “defaultTagGroup?”](#defaulttaggroup) > `optional` **defaultTagGroup**: `string` Defined in: [src/util/types.ts:80](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L80) *** ### externalDocs? [Section titled “externalDocs?”](#externaldocs) > `optional` **externalDocs**: `any` Defined in: [src/util/types.ts:79](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L79) *** ### info? [Section titled “info?”](#info) > `optional` **info**: `any` Defined in: [src/util/types.ts:75](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L75) *** ### servers? [Section titled “servers?”](#servers) > `optional` **servers**: `any` Defined in: [src/util/types.ts:76](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L76) *** ### tags? [Section titled “tags?”](#tags) > `optional` **tags**: `any` Defined in: [src/util/types.ts:78](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L78)
# ProcessResult
Defined in: [src/util/types.ts:412](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L412) ## Properties [Section titled “Properties”](#properties) ### data [Section titled “data”](#data) > **data**: `any` Defined in: [src/util/types.ts:415](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L415) *** ### headers [Section titled “headers”](#headers) > **headers**: `Record`<`string`, `string`> Defined in: [src/util/types.ts:414](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L414) *** ### status [Section titled “status”](#status) > **status**: `number` Defined in: [src/util/types.ts:413](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L413)
# ProviderConfig
Defined in: [src/plugins/application/auth.ts:25](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/application/auth.ts#L25) ## Properties [Section titled “Properties”](#properties) ### authUrl? [Section titled “authUrl?”](#authurl) > `optional` **authUrl**: `string` Defined in: [src/plugins/application/auth.ts:61](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/application/auth.ts#L61) Auth URL (Generic OAuth2) *** ### clientId [Section titled “clientId”](#clientid) > **clientId**: `string` Defined in: [src/plugins/application/auth.ts:29](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/application/auth.ts#L29) Client ID *** ### clientSecret [Section titled “clientSecret”](#clientsecret) > **clientSecret**: `string` Defined in: [src/plugins/application/auth.ts:33](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/application/auth.ts#L33) Client secret *** ### domain? [Section titled “domain?”](#domain) > `optional` **domain**: `string` Defined in: [src/plugins/application/auth.ts:49](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/application/auth.ts#L49) Domain (Auth0, Okta) *** ### keyId? [Section titled “keyId?”](#keyid) > `optional` **keyId**: `string` Defined in: [src/plugins/application/auth.ts:57](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/application/auth.ts#L57) Key ID (Apple) *** ### redirectUri [Section titled “redirectUri”](#redirecturi) > **redirectUri**: `string` Defined in: [src/plugins/application/auth.ts:37](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/application/auth.ts#L37) Redirect URI *** ### scopes? [Section titled “scopes?”](#scopes) > `optional` **scopes**: `string`\[] Defined in: [src/plugins/application/auth.ts:41](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/application/auth.ts#L41) Scopes *** ### teamId? [Section titled “teamId?”](#teamid) > `optional` **teamId**: `string` Defined in: [src/plugins/application/auth.ts:53](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/application/auth.ts#L53) Team ID (Apple) *** ### tenantId? [Section titled “tenantId?”](#tenantid) > `optional` **tenantId**: `string` Defined in: [src/plugins/application/auth.ts:45](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/application/auth.ts#L45) Tenant ID (MSFT AD) *** ### tokenUrl? [Section titled “tokenUrl?”](#tokenurl) > `optional` **tokenUrl**: `string` Defined in: [src/plugins/application/auth.ts:65](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/application/auth.ts#L65) Token URL (Generic OAuth2) *** ### userInfoUrl? [Section titled “userInfoUrl?”](#userinfourl) > `optional` **userInfoUrl**: `string` Defined in: [src/plugins/application/auth.ts:69](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/application/auth.ts#L69) User info URL (Generic OAuth2)
# RateLimitOptions
Defined in: [src/plugins/middleware/rate-limit.ts:4](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/rate-limit.ts#L4) ## Properties [Section titled “Properties”](#properties) ### headers? [Section titled “headers?”](#headers) > `optional` **headers**: `boolean` Defined in: [src/plugins/middleware/rate-limit.ts:28](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/rate-limit.ts#L28) Whether to include X-RateLimit headers in the response *** ### keyGenerator()? [Section titled “keyGenerator()?”](#keygenerator) > `optional` **keyGenerator**: (`ctx`) => `string` Defined in: [src/plugins/middleware/rate-limit.ts:34](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/rate-limit.ts#L34) Function to generate a unique key for each request This is used to identify the user or source of the request Defaults to the request’s ip address. #### Parameters [Section titled “Parameters”](#parameters) ##### ctx [Section titled “ctx”](#ctx) [`ShokupanContext`](/api/classes/shokupancontext/) #### Returns [Section titled “Returns”](#returns) `string` *** ### limit? [Section titled “limit?”](#limit) > `optional` **limit**: `number` Defined in: [src/plugins/middleware/rate-limit.ts:16](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/rate-limit.ts#L16) Alias for max *** ### max? [Section titled “max?”](#max) > `optional` **max**: `number` Defined in: [src/plugins/middleware/rate-limit.ts:12](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/rate-limit.ts#L12) Maximum number of requests allowed in the window *** ### message? [Section titled “message?”](#message) > `optional` **message**: `string` | `object` | (`ctx`, `key`) => `string` | `object` Defined in: [src/plugins/middleware/rate-limit.ts:20](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/rate-limit.ts#L20) Message to send when rate limited *** ### mode? [Section titled “mode?”](#mode) > `optional` **mode**: `"user"` | `"absolute"` Defined in: [src/plugins/middleware/rate-limit.ts:48](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/rate-limit.ts#L48) Mode to use for rate limiting * user: Rate limit per user (generated key, defaults to ip address) * absolute: Rate limit for all users *** ### onRateLimited()? [Section titled “onRateLimited()?”](#onratelimited) > `optional` **onRateLimited**: (`ctx`, `key`) => `void` | `Response` | `Promise`<`void` | `Response`> Defined in: [src/plugins/middleware/rate-limit.ts:38](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/rate-limit.ts#L38) Function to execute when a request is rate limited #### Parameters [Section titled “Parameters”](#parameters-1) ##### ctx [Section titled “ctx”](#ctx-1) [`ShokupanContext`](/api/classes/shokupancontext/) ##### key [Section titled “key”](#key) `string` #### Returns [Section titled “Returns”](#returns-1) `void` | `Response` | `Promise`<`void` | `Response`> *** ### skip()? [Section titled “skip()?”](#skip) > `optional` **skip**: (`ctx`) => `boolean` Defined in: [src/plugins/middleware/rate-limit.ts:42](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/rate-limit.ts#L42) Function to determine whether to skip rate limiting #### Parameters [Section titled “Parameters”](#parameters-2) ##### ctx [Section titled “ctx”](#ctx-2) [`ShokupanContext`](/api/classes/shokupancontext/) #### Returns [Section titled “Returns”](#returns-2) `boolean` *** ### statusCode? [Section titled “statusCode?”](#statuscode) > `optional` **statusCode**: `number` Defined in: [src/plugins/middleware/rate-limit.ts:24](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/rate-limit.ts#L24) Status code to send when rate limited *** ### trustedProxies? [Section titled “trustedProxies?”](#trustedproxies) > `optional` **trustedProxies**: `string`\[] Defined in: [src/plugins/middleware/rate-limit.ts:52](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/rate-limit.ts#L52) List of trusted proxy IPs *** ### windowMs? [Section titled “windowMs?”](#windowms) > `optional` **windowMs**: `number` Defined in: [src/plugins/middleware/rate-limit.ts:8](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/rate-limit.ts#L8) Window in milliseconds
# RequestOptions
Defined in: [src/util/types.ts:403](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L403) ## Properties [Section titled “Properties”](#properties) ### body? [Section titled “body?”](#body) > `optional` **body**: `any` Defined in: [src/util/types.ts:408](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L408) *** ### headers? [Section titled “headers?”](#headers) > `optional` **headers**: `Record`<`string`, `string`> Defined in: [src/util/types.ts:407](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L407) *** ### method? [Section titled “method?”](#method) > `optional` **method**: [`Method`](/api/type-aliases/method/) Defined in: [src/util/types.ts:406](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L406) *** ### path? [Section titled “path?”](#path) > `optional` **path**: `string` Defined in: [src/util/types.ts:404](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L404) *** ### query? [Section titled “query?”](#query) > `optional` **query**: `Record`<`string`, `string`> Defined in: [src/util/types.ts:409](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L409) *** ### url? [Section titled “url?”](#url) > `optional` **url**: `string` Defined in: [src/util/types.ts:405](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L405)
# RouteMetadata
Defined in: [src/util/types.ts:62](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L62) ## Properties [Section titled “Properties”](#properties) ### file [Section titled “file”](#file) > **file**: `string` Defined in: [src/util/types.ts:63](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L63) *** ### isBuiltin? [Section titled “isBuiltin?”](#isbuiltin) > `optional` **isBuiltin**: `boolean` Defined in: [src/util/types.ts:66](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L66) *** ### line [Section titled “line”](#line) > **line**: `number` Defined in: [src/util/types.ts:64](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L64) *** ### name? [Section titled “name?”](#name) > `optional` **name**: `string` Defined in: [src/util/types.ts:65](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L65) *** ### pluginName? [Section titled “pluginName?”](#pluginname) > `optional` **pluginName**: `string` Defined in: [src/util/types.ts:67](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L67)
# SecurityHeadersOptions
Defined in: [src/plugins/middleware/security-headers.ts:4](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/security-headers.ts#L4) ## Properties [Section titled “Properties”](#properties) ### contentSecurityPolicy? [Section titled “contentSecurityPolicy?”](#contentsecuritypolicy) > `optional` **contentSecurityPolicy**: `boolean` | `Record`<`string`, `any`> Defined in: [src/plugins/middleware/security-headers.ts:8](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/security-headers.ts#L8) Content Security Policy *** ### crossOriginEmbedderPolicy? [Section titled “crossOriginEmbedderPolicy?”](#crossoriginembedderpolicy) > `optional` **crossOriginEmbedderPolicy**: `boolean` Defined in: [src/plugins/middleware/security-headers.ts:12](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/security-headers.ts#L12) Cross-Origin Embedder Policy *** ### crossOriginOpenerPolicy? [Section titled “crossOriginOpenerPolicy?”](#crossoriginopenerpolicy) > `optional` **crossOriginOpenerPolicy**: `boolean` Defined in: [src/plugins/middleware/security-headers.ts:16](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/security-headers.ts#L16) Cross-Origin Opener Policy *** ### crossOriginResourcePolicy? [Section titled “crossOriginResourcePolicy?”](#crossoriginresourcepolicy) > `optional` **crossOriginResourcePolicy**: `boolean` Defined in: [src/plugins/middleware/security-headers.ts:20](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/security-headers.ts#L20) Cross-Origin Resource Policy *** ### dnsPrefetchControl? [Section titled “dnsPrefetchControl?”](#dnsprefetchcontrol) > `optional` **dnsPrefetchControl**: `boolean` | { `allow`: `boolean`; } Defined in: [src/plugins/middleware/security-headers.ts:24](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/security-headers.ts#L24) DNS Prefetch Control *** ### expectCt? [Section titled “expectCt?”](#expectct) > `optional` **expectCt**: `boolean` | { `enforce?`: `boolean`; `maxAge?`: `number`; `reportUri?`: `string`; } Defined in: [src/plugins/middleware/security-headers.ts:28](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/security-headers.ts#L28) Expect CT *** ### frameguard? [Section titled “frameguard?”](#frameguard) > `optional` **frameguard**: `boolean` | { `action`: `"deny"` | `"sameorigin"` | `"allow-from"`; `domain?`: `string`; } Defined in: [src/plugins/middleware/security-headers.ts:32](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/security-headers.ts#L32) Frameguard *** ### hidePoweredBy? [Section titled “hidePoweredBy?”](#hidepoweredby) > `optional` **hidePoweredBy**: `boolean` Defined in: [src/plugins/middleware/security-headers.ts:36](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/security-headers.ts#L36) Hide Powered By *** ### hsts? [Section titled “hsts?”](#hsts) > `optional` **hsts**: `boolean` | { `includeSubDomains?`: `boolean`; `maxAge?`: `number`; `preload?`: `boolean`; } Defined in: [src/plugins/middleware/security-headers.ts:40](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/security-headers.ts#L40) HTTP Strict Transport Security *** ### ieNoOpen? [Section titled “ieNoOpen?”](#ienoopen) > `optional` **ieNoOpen**: `boolean` Defined in: [src/plugins/middleware/security-headers.ts:44](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/security-headers.ts#L44) IE No Open *** ### noSniff? [Section titled “noSniff?”](#nosniff) > `optional` **noSniff**: `boolean` Defined in: [src/plugins/middleware/security-headers.ts:48](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/security-headers.ts#L48) No Sniff *** ### originAgentCluster? [Section titled “originAgentCluster?”](#originagentcluster) > `optional` **originAgentCluster**: `boolean` Defined in: [src/plugins/middleware/security-headers.ts:52](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/security-headers.ts#L52) Origin Agent Cluster *** ### permittedCrossDomainPolicies? [Section titled “permittedCrossDomainPolicies?”](#permittedcrossdomainpolicies) > `optional` **permittedCrossDomainPolicies**: `boolean` | { `permittedPolicies`: `"none"` | `"all"` | `"master-only"` | `"by-content-type"`; } Defined in: [src/plugins/middleware/security-headers.ts:56](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/security-headers.ts#L56) Permitted Cross Domain Policies *** ### referrerPolicy? [Section titled “referrerPolicy?”](#referrerpolicy) > `optional` **referrerPolicy**: `boolean` | { `policy`: `string` | `string`\[]; } Defined in: [src/plugins/middleware/security-headers.ts:60](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/security-headers.ts#L60) Referrer Policy *** ### xssFilter? [Section titled “xssFilter?”](#xssfilter) > `optional` **xssFilter**: `boolean` Defined in: [src/plugins/middleware/security-headers.ts:64](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/security-headers.ts#L64) X-XSS-Protection
# ServerFactory
Defined in: [src/util/types.ts:125](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L125) > **ServerFactory**(`options`): `Server` | `Promise`<`Server`> | `Server`<*typeof* `IncomingMessage`, *typeof* `ServerResponse`> | `Promise`<`Server`<*typeof* `IncomingMessage`, *typeof* `ServerResponse`>> Defined in: [src/util/types.ts:126](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L126) ## Parameters [Section titled “Parameters”](#parameters) ### options [Section titled “options”](#options) `any` ## Returns [Section titled “Returns”](#returns) `Server` | `Promise`<`Server`> | `Server`<*typeof* `IncomingMessage`, *typeof* `ServerResponse`> | `Promise`<`Server`<*typeof* `IncomingMessage`, *typeof* `ServerResponse`>>
# SessionContext
Defined in: [src/plugins/middleware/session.ts:278](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/session.ts#L278) ## Properties [Section titled “Properties”](#properties) ### session [Section titled “session”](#session) > **session**: [`SessionData`](/api/interfaces/sessiondata/) & `object` Defined in: [src/plugins/middleware/session.ts:279](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/session.ts#L279) #### Type Declaration [Section titled “Type Declaration”](#type-declaration) ##### id [Section titled “id”](#id) > **id**: `string` ##### destroy() [Section titled “destroy()”](#destroy) > **destroy**(`callback`): `void` ###### Parameters [Section titled “Parameters”](#parameters) ###### callback [Section titled “callback”](#callback) (`err`) => `void` ###### Returns [Section titled “Returns”](#returns) `void` ##### regenerate() [Section titled “regenerate()”](#regenerate) > **regenerate**(`callback`): `void` ###### Parameters [Section titled “Parameters”](#parameters-1) ###### callback [Section titled “callback”](#callback-1) (`err`) => `void` ###### Returns [Section titled “Returns”](#returns-1) `void` ##### reload() [Section titled “reload()”](#reload) > **reload**(`callback`): `void` ###### Parameters [Section titled “Parameters”](#parameters-2) ###### callback [Section titled “callback”](#callback-2) (`err`) => `void` ###### Returns [Section titled “Returns”](#returns-2) `void` ##### save() [Section titled “save()”](#save) > **save**(`callback`): `void` ###### Parameters [Section titled “Parameters”](#parameters-3) ###### callback [Section titled “callback”](#callback-3) (`err`) => `void` ###### Returns [Section titled “Returns”](#returns-3) `void` ##### touch() [Section titled “touch()”](#touch) > **touch**(): `void` ###### Returns [Section titled “Returns”](#returns-4) `void` *** ### sessionID [Section titled “sessionID”](#sessionid) > **sessionID**: `string` Defined in: [src/plugins/middleware/session.ts:287](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/session.ts#L287) *** ### sessionStore [Section titled “sessionStore”](#sessionstore) > **sessionStore**: [`Store`](/api/interfaces/store/) Defined in: [src/plugins/middleware/session.ts:288](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/session.ts#L288)
# SessionCookieOptions
Defined in: [src/plugins/middleware/session.ts:13](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/session.ts#L13) ## Properties [Section titled “Properties”](#properties) ### domain? [Section titled “domain?”](#domain) > `optional` **domain**: `string` Defined in: [src/plugins/middleware/session.ts:37](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/session.ts#L37) Domain of the session cookie. *** ### expires? [Section titled “expires?”](#expires) > `optional` **expires**: `Date` Defined in: [src/plugins/middleware/session.ts:25](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/session.ts#L25) Expiration date of the session cookie. *** ### httpOnly? [Section titled “httpOnly?”](#httponly) > `optional` **httpOnly**: `boolean` Defined in: [src/plugins/middleware/session.ts:29](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/session.ts#L29) Whether the session cookie should be HTTP-only. *** ### maxAge? [Section titled “maxAge?”](#maxage) > `optional` **maxAge**: `number` Defined in: [src/plugins/middleware/session.ts:17](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/session.ts#L17) Maximum age of the session cookie in milliseconds. *** ### path? [Section titled “path?”](#path) > `optional` **path**: `string` Defined in: [src/plugins/middleware/session.ts:33](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/session.ts#L33) Path of the session cookie. *** ### priority? [Section titled “priority?”](#priority) > `optional` **priority**: `"low"` | `"medium"` | `"high"` Defined in: [src/plugins/middleware/session.ts:49](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/session.ts#L49) Priority of the session cookie. *** ### sameSite? [Section titled “sameSite?”](#samesite) > `optional` **sameSite**: `boolean` | `"lax"` | `"strict"` | `"none"` Defined in: [src/plugins/middleware/session.ts:45](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/session.ts#L45) SameSite attribute of the session cookie. *** ### secure? [Section titled “secure?”](#secure) > `optional` **secure**: `boolean` | `"auto"` Defined in: [src/plugins/middleware/session.ts:41](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/session.ts#L41) Whether the session cookie should be secure. *** ### signed? [Section titled “signed?”](#signed) > `optional` **signed**: `boolean` Defined in: [src/plugins/middleware/session.ts:21](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/session.ts#L21) Whether the session cookie should be signed.
# SessionData
Defined in: [src/plugins/middleware/session.ts:8](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/session.ts#L8) ## Indexable [Section titled “Indexable”](#indexable) \[`key`: `string`]: `any` ## Properties [Section titled “Properties”](#properties) ### cookie [Section titled “cookie”](#cookie) > **cookie**: `Cookie` Defined in: [src/plugins/middleware/session.ts:9](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/session.ts#L9)
# SessionOptions
Defined in: [src/plugins/middleware/session.ts:52](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/session.ts#L52) ## Properties [Section titled “Properties”](#properties) ### cookie? [Section titled “cookie?”](#cookie) > `optional` **cookie**: [`SessionCookieOptions`](/api/interfaces/sessioncookieoptions/) Defined in: [src/plugins/middleware/session.ts:68](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/session.ts#L68) Options for the session cookie. *** ### genid()? [Section titled “genid()?”](#genid) > `optional` **genid**: (`ctx`) => `string` Defined in: [src/plugins/middleware/session.ts:72](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/session.ts#L72) Function to generate a session ID. #### Parameters [Section titled “Parameters”](#parameters) ##### ctx [Section titled “ctx”](#ctx) [`ShokupanContext`](/api/classes/shokupancontext/) #### Returns [Section titled “Returns”](#returns) `string` *** ### name? [Section titled “name?”](#name) > `optional` **name**: `string` Defined in: [src/plugins/middleware/session.ts:60](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/session.ts#L60) Name of the session cookie. *** ### resave? [Section titled “resave?”](#resave) > `optional` **resave**: `boolean` Defined in: [src/plugins/middleware/session.ts:76](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/session.ts#L76) Whether to force a session identifier cookie to be set on every response. *** ### rolling? [Section titled “rolling?”](#rolling) > `optional` **rolling**: `boolean` Defined in: [src/plugins/middleware/session.ts:84](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/session.ts#L84) Whether to update the session cookie on every request. *** ### saveUninitialized? [Section titled “saveUninitialized?”](#saveuninitialized) > `optional` **saveUninitialized**: `boolean` Defined in: [src/plugins/middleware/session.ts:80](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/session.ts#L80) Whether to save the session on every request. *** ### secret [Section titled “secret”](#secret) > **secret**: `string` | `string`\[] Defined in: [src/plugins/middleware/session.ts:56](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/session.ts#L56) Secret used to sign the session cookie. *** ### store? [Section titled “store?”](#store) > `optional` **store**: [`Store`](/api/interfaces/store/) Defined in: [src/plugins/middleware/session.ts:64](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/session.ts#L64) Store to use for session data. *** ### unset? [Section titled “unset?”](#unset) > `optional` **unset**: `"destroy"` | `"keep"` Defined in: [src/plugins/middleware/session.ts:88](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/session.ts#L88) Whether to destroy or keep the session on logout.
# ShokupanHooks
Defined in: [src/util/types.ts:84](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L84) ## Type Parameters [Section titled “Type Parameters”](#type-parameters) ### T [Section titled “T”](#t) `T` = `any` ## Properties [Section titled “Properties”](#properties) ### afterValidate()? [Section titled “afterValidate()?”](#aftervalidate) > `optional` **afterValidate**: (`ctx`, `data`) => `void` | `Promise`<`void`> Defined in: [src/util/types.ts:91](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L91) #### Parameters [Section titled “Parameters”](#parameters) ##### ctx [Section titled “ctx”](#ctx) [`ShokupanContext`](/api/classes/shokupancontext/)<`T`> ##### data [Section titled “data”](#data) `any` #### Returns [Section titled “Returns”](#returns) `void` | `Promise`<`void`> *** ### beforeValidate()? [Section titled “beforeValidate()?”](#beforevalidate) > `optional` **beforeValidate**: (`ctx`, `data`) => `void` | `Promise`<`void`> Defined in: [src/util/types.ts:90](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L90) #### Parameters [Section titled “Parameters”](#parameters-1) ##### ctx [Section titled “ctx”](#ctx-1) [`ShokupanContext`](/api/classes/shokupancontext/)<`T`> ##### data [Section titled “data”](#data-1) `any` #### Returns [Section titled “Returns”](#returns-1) `void` | `Promise`<`void`> *** ### onError()? [Section titled “onError()?”](#onerror) > `optional` **onError**: (`ctx`, `error`) => `void` | `Promise`<`void`> Defined in: [src/util/types.ts:85](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L85) #### Parameters [Section titled “Parameters”](#parameters-2) ##### ctx [Section titled “ctx”](#ctx-2) [`ShokupanContext`](/api/classes/shokupancontext/)<`T`> ##### error [Section titled “error”](#error) `unknown` #### Returns [Section titled “Returns”](#returns-2) `void` | `Promise`<`void`> *** ### onReadTimeout()? [Section titled “onReadTimeout()?”](#onreadtimeout) > `optional` **onReadTimeout**: (`ctx`) => `void` | `Promise`<`void`> Defined in: [src/util/types.ts:92](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L92) #### Parameters [Section titled “Parameters”](#parameters-3) ##### ctx [Section titled “ctx”](#ctx-3) [`ShokupanContext`](/api/classes/shokupancontext/)<`T`> #### Returns [Section titled “Returns”](#returns-3) `void` | `Promise`<`void`> *** ### onRequestEnd()? [Section titled “onRequestEnd()?”](#onrequestend) > `optional` **onRequestEnd**: (`ctx`) => `void` | `Promise`<`void`> Defined in: [src/util/types.ts:87](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L87) #### Parameters [Section titled “Parameters”](#parameters-4) ##### ctx [Section titled “ctx”](#ctx-4) [`ShokupanContext`](/api/classes/shokupancontext/)<`T`> #### Returns [Section titled “Returns”](#returns-4) `void` | `Promise`<`void`> *** ### onRequestStart()? [Section titled “onRequestStart()?”](#onrequeststart) > `optional` **onRequestStart**: (`ctx`) => `void` | `Promise`<`void`> Defined in: [src/util/types.ts:86](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L86) #### Parameters [Section titled “Parameters”](#parameters-5) ##### ctx [Section titled “ctx”](#ctx-5) [`ShokupanContext`](/api/classes/shokupancontext/)<`T`> #### Returns [Section titled “Returns”](#returns-5) `void` | `Promise`<`void`> *** ### onRequestTimeout()? [Section titled “onRequestTimeout()?”](#onrequesttimeout) > `optional` **onRequestTimeout**: (`ctx`) => `void` | `Promise`<`void`> Defined in: [src/util/types.ts:94](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L94) #### Parameters [Section titled “Parameters”](#parameters-6) ##### ctx [Section titled “ctx”](#ctx-6) [`ShokupanContext`](/api/classes/shokupancontext/)<`T`> #### Returns [Section titled “Returns”](#returns-6) `void` | `Promise`<`void`> *** ### onResponseEnd()? [Section titled “onResponseEnd()?”](#onresponseend) > `optional` **onResponseEnd**: (`ctx`, `response`) => `void` | `Promise`<`void`> Defined in: [src/util/types.ts:89](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L89) #### Parameters [Section titled “Parameters”](#parameters-7) ##### ctx [Section titled “ctx”](#ctx-7) [`ShokupanContext`](/api/classes/shokupancontext/)<`T`> ##### response [Section titled “response”](#response) `Response` #### Returns [Section titled “Returns”](#returns-7) `void` | `Promise`<`void`> *** ### onResponseStart()? [Section titled “onResponseStart()?”](#onresponsestart) > `optional` **onResponseStart**: (`ctx`, `response`) => `void` | `Promise`<`void`> Defined in: [src/util/types.ts:88](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L88) #### Parameters [Section titled “Parameters”](#parameters-8) ##### ctx [Section titled “ctx”](#ctx-8) [`ShokupanContext`](/api/classes/shokupancontext/)<`T`> ##### response [Section titled “response”](#response-1) `Response` #### Returns [Section titled “Returns”](#returns-8) `void` | `Promise`<`void`> *** ### onWriteTimeout()? [Section titled “onWriteTimeout()?”](#onwritetimeout) > `optional` **onWriteTimeout**: (`ctx`) => `void` | `Promise`<`void`> Defined in: [src/util/types.ts:93](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L93) #### Parameters [Section titled “Parameters”](#parameters-9) ##### ctx [Section titled “ctx”](#ctx-9) [`ShokupanContext`](/api/classes/shokupancontext/)<`T`> #### Returns [Section titled “Returns”](#returns-9) `void` | `Promise`<`void`>
# ShokupanPlugin
Defined in: [src/util/types.ts:13](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L13) ## Properties [Section titled “Properties”](#properties) ### onInit() [Section titled “onInit()”](#oninit) > **onInit**: (`app`, `options?`) => `void` | `Promise`<`void`> Defined in: [src/util/types.ts:14](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L14) #### Parameters [Section titled “Parameters”](#parameters) ##### app [Section titled “app”](#app) `any` ##### options? [Section titled “options?”](#options) [`ShokupanPluginOptions`](/api/interfaces/shokupanpluginoptions/) #### Returns [Section titled “Returns”](#returns) `void` | `Promise`<`void`>
# ShokupanPluginOptions
Defined in: [src/util/types.ts:9](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L9) ## Properties [Section titled “Properties”](#properties) ### path? [Section titled “path?”](#path) > `optional` **path**: `string` Defined in: [src/util/types.ts:10](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L10)
# StaticServeHooks
Defined in: [src/util/types.ts:422](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L422) ## Type Parameters [Section titled “Type Parameters”](#type-parameters) ### T [Section titled “T”](#t) `T` *extends* `Record`<`string`, `any`> ## Properties [Section titled “Properties”](#properties) ### onRequest()? [Section titled “onRequest()?”](#onrequest) > `optional` **onRequest**: (`ctx`) => `void` | `Response` | `Promise`<`void` | `Response`> Defined in: [src/util/types.ts:423](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L423) #### Parameters [Section titled “Parameters”](#parameters) ##### ctx [Section titled “ctx”](#ctx) [`ShokupanContext`](/api/classes/shokupancontext/)<`T`> #### Returns [Section titled “Returns”](#returns) `void` | `Response` | `Promise`<`void` | `Response`> *** ### onResponse()? [Section titled “onResponse()?”](#onresponse) > `optional` **onResponse**: (`ctx`, `response`) => `Response` | `Promise`<`Response`> Defined in: [src/util/types.ts:424](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L424) #### Parameters [Section titled “Parameters”](#parameters-1) ##### ctx [Section titled “ctx”](#ctx-1) [`ShokupanContext`](/api/classes/shokupancontext/)<`T`> ##### response [Section titled “response”](#response) `Response` #### Returns [Section titled “Returns”](#returns-1) `Response` | `Promise`<`Response`>
# StaticServeOptions
Defined in: [src/util/types.ts:427](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L427) ## Type Parameters [Section titled “Type Parameters”](#type-parameters) ### T [Section titled “T”](#t) `T` *extends* `Record`<`string`, `any`> ## Properties [Section titled “Properties”](#properties) ### dotfiles? [Section titled “dotfiles?”](#dotfiles) > `optional` **dotfiles**: `"allow"` | `"deny"` | `"ignore"` Defined in: [src/util/types.ts:458](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L458) How to treat dotfiles (files starting with .) ‘allow’: Serve them ‘deny’: Return 403 ‘ignore’: Return 404 #### Default [Section titled “Default”](#default) ```ts 'ignore' ``` *** ### exclude? [Section titled “exclude?”](#exclude) > `optional` **exclude**: (`string` | `RegExp`)\[] Defined in: [src/util/types.ts:462](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L462) Regex or glob patterns to exclude *** ### extensions? [Section titled “extensions?”](#extensions) > `optional` **extensions**: `string`\[] Defined in: [src/util/types.ts:467](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L467) Try to append these extensions to the path if the file is not found. e.g. \[‘html’, ‘htm’] *** ### hooks? [Section titled “hooks?”](#hooks) > `optional` **hooks**: [`StaticServeHooks`](/api/interfaces/staticservehooks/)<`T`> Defined in: [src/util/types.ts:450](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L450) Hooks to intercept requests/responses. *** ### index? [Section titled “index?”](#index) > `optional` **index**: `string` | `string`\[] Defined in: [src/util/types.ts:446](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L446) Index file(s) to look for when a directory is requested. #### Default [Section titled “Default”](#default-1) ```ts ['index.html', 'index.htm'] ``` *** ### listDirectory? [Section titled “listDirectory?”](#listdirectory) > `optional` **listDirectory**: `boolean` Defined in: [src/util/types.ts:441](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L441) Whether to list directory contents if no index file is found. Security Note: Directory listing is disabled by default to prevent information disclosure. Enable this only if you specifically need it and understand the security implications. #### Default [Section titled “Default”](#default-2) ```ts false ``` *** ### openapi? [Section titled “openapi?”](#openapi) > `optional` **openapi**: [`MethodAPISpec`](/api/type-aliases/methodapispec/) Defined in: [src/util/types.ts:471](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L471) OpenAPI specification for the static route. *** ### root? [Section titled “root?”](#root) > `optional` **root**: `string` Defined in: [src/util/types.ts:432](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L432) Root directory to serve files from. Can be an absolute path or relative to the CWD.
# Store
Defined in: [src/plugins/middleware/session.ts:91](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/session.ts#L91) ## Extends [Section titled “Extends”](#extends) * `EventEmitter` ## Methods [Section titled “Methods”](#methods) ### \[captureRejectionSymbol]\()? [Section titled “\[captureRejectionSymbol\]()?”](#capturerejectionsymbol) > `optional` **\[captureRejectionSymbol]**<`K`>(`error`, `event`, …`args`): `void` Defined in: node\_modules/@types/node/events.d.ts:136 #### Type Parameters [Section titled “Type Parameters”](#type-parameters) ##### K [Section titled “K”](#k) `K` #### Parameters [Section titled “Parameters”](#parameters) ##### error [Section titled “error”](#error) `Error` ##### event [Section titled “event”](#event) `string` | `symbol` ##### args [Section titled “args”](#args) …`AnyRest` #### Returns [Section titled “Returns”](#returns) `void` #### Inherited from [Section titled “Inherited from”](#inherited-from) `EventEmitter.[captureRejectionSymbol]` *** ### addListener() [Section titled “addListener()”](#addlistener) > **addListener**<`K`>(`eventName`, `listener`): `this` Defined in: node\_modules/@types/node/events.d.ts:596 Alias for `emitter.on(eventName, listener)`. #### Type Parameters [Section titled “Type Parameters”](#type-parameters-1) ##### K [Section titled “K”](#k-1) `K` #### Parameters [Section titled “Parameters”](#parameters-1) ##### eventName [Section titled “eventName”](#eventname) `string` | `symbol` ##### listener [Section titled “listener”](#listener) (…`args`) => `void` #### Returns [Section titled “Returns”](#returns-1) `this` #### Since [Section titled “Since”](#since) v0.1.26 #### Inherited from [Section titled “Inherited from”](#inherited-from-1) `EventEmitter.addListener` *** ### all()? [Section titled “all()?”](#all) > `optional` **all**(`callback`): `void` Defined in: [src/plugins/middleware/session.ts:111](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/session.ts#L111) Retrieves all sessions. #### Parameters [Section titled “Parameters”](#parameters-2) ##### callback [Section titled “callback”](#callback) (`err`, `obj?`) => `void` #### Returns [Section titled “Returns”](#returns-2) `void` *** ### clear()? [Section titled “clear()?”](#clear) > `optional` **clear**(`callback?`): `void` Defined in: [src/plugins/middleware/session.ts:119](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/session.ts#L119) Clears all sessions. #### Parameters [Section titled “Parameters”](#parameters-3) ##### callback? [Section titled “callback?”](#callback-1) (`err?`) => `void` #### Returns [Section titled “Returns”](#returns-3) `void` *** ### createSession()? [Section titled “createSession()?”](#createsession) > `optional` **createSession**(`req`, `session`): [`SessionData`](/api/interfaces/sessiondata/) Defined in: [src/plugins/middleware/session.ts:127](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/session.ts#L127) Creates a session. #### Parameters [Section titled “Parameters”](#parameters-4) ##### req [Section titled “req”](#req) `any` ##### session [Section titled “session”](#session) [`SessionData`](/api/interfaces/sessiondata/) #### Returns [Section titled “Returns”](#returns-4) [`SessionData`](/api/interfaces/sessiondata/) *** ### destroy() [Section titled “destroy()”](#destroy) > **destroy**(`sid`, `callback?`): `void` Defined in: [src/plugins/middleware/session.ts:103](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/session.ts#L103) Destroys a session. #### Parameters [Section titled “Parameters”](#parameters-5) ##### sid [Section titled “sid”](#sid) `string` ##### callback? [Section titled “callback?”](#callback-2) (`err?`) => `void` #### Returns [Section titled “Returns”](#returns-5) `void` *** ### emit() [Section titled “emit()”](#emit) > **emit**<`K`>(`eventName`, …`args`): `boolean` Defined in: node\_modules/@types/node/events.d.ts:858 Synchronously calls each of the listeners registered for the event named `eventName`, in the order they were registered, passing the supplied arguments to each. Returns `true` if the event had listeners, `false` otherwise. ```js import { EventEmitter } from 'node:events'; const myEmitter = new EventEmitter(); // First listener myEmitter.on('event', function firstListener() { console.log('Helloooo! first listener'); }); // Second listener myEmitter.on('event', function secondListener(arg1, arg2) { console.log(`event with parameters ${arg1}, ${arg2} in second listener`); }); // Third listener myEmitter.on('event', function thirdListener(...args) { const parameters = args.join(', '); console.log(`event with parameters ${parameters} in third listener`); }); console.log(myEmitter.listeners('event')); myEmitter.emit('event', 1, 2, 3, 4, 5); // Prints: // [ // [Function: firstListener], // [Function: secondListener], // [Function: thirdListener] // ] // Helloooo! first listener // event with parameters 1, 2 in second listener // event with parameters 1, 2, 3, 4, 5 in third listener ``` #### Type Parameters [Section titled “Type Parameters”](#type-parameters-2) ##### K [Section titled “K”](#k-2) `K` #### Parameters [Section titled “Parameters”](#parameters-6) ##### eventName [Section titled “eventName”](#eventname-1) `string` | `symbol` ##### args [Section titled “args”](#args-1) …`AnyRest` #### Returns [Section titled “Returns”](#returns-6) `boolean` #### Since [Section titled “Since”](#since-1) v0.1.26 #### Inherited from [Section titled “Inherited from”](#inherited-from-2) `EventEmitter.emit` *** ### eventNames() [Section titled “eventNames()”](#eventnames) > **eventNames**(): (`string` | `symbol`)\[] Defined in: node\_modules/@types/node/events.d.ts:921 Returns an array listing the events for which the emitter has registered listeners. The values in the array are strings or `Symbol`s. ```js import { EventEmitter } from 'node:events'; const myEE = new EventEmitter(); myEE.on('foo', () => {}); myEE.on('bar', () => {}); const sym = Symbol('symbol'); myEE.on(sym, () => {}); console.log(myEE.eventNames()); // Prints: [ 'foo', 'bar', Symbol(symbol) ] ``` #### Returns [Section titled “Returns”](#returns-7) (`string` | `symbol`)\[] #### Since [Section titled “Since”](#since-2) v6.0.0 #### Inherited from [Section titled “Inherited from”](#inherited-from-3) `EventEmitter.eventNames` *** ### get() [Section titled “get()”](#get) > **get**(`sid`, `callback`): `void` Defined in: [src/plugins/middleware/session.ts:95](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/session.ts#L95) Retrieves a session by ID. #### Parameters [Section titled “Parameters”](#parameters-7) ##### sid [Section titled “sid”](#sid-1) `string` ##### callback [Section titled “callback”](#callback-3) (`err`, `session?`) => `void` #### Returns [Section titled “Returns”](#returns-8) `void` *** ### getMaxListeners() [Section titled “getMaxListeners()”](#getmaxlisteners) > **getMaxListeners**(): `number` Defined in: node\_modules/@types/node/events.d.ts:773 Returns the current max listener value for the `EventEmitter` which is either set by `emitter.setMaxListeners(n)` or defaults to [EventEmitter.defaultMaxListeners](/api/classes/memorystore/#defaultmaxlisteners). #### Returns [Section titled “Returns”](#returns-9) `number` #### Since [Section titled “Since”](#since-3) v1.0.0 #### Inherited from [Section titled “Inherited from”](#inherited-from-4) `EventEmitter.getMaxListeners` *** ### length()? [Section titled “length()?”](#length) > `optional` **length**(`callback`): `void` Defined in: [src/plugins/middleware/session.ts:115](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/session.ts#L115) Retrieves the number of sessions. #### Parameters [Section titled “Parameters”](#parameters-8) ##### callback [Section titled “callback”](#callback-4) (`err`, `length?`) => `void` #### Returns [Section titled “Returns”](#returns-10) `void` *** ### listenerCount() [Section titled “listenerCount()”](#listenercount) > **listenerCount**<`K`>(`eventName`, `listener?`): `number` Defined in: node\_modules/@types/node/events.d.ts:867 Returns the number of listeners listening for the event named `eventName`. If `listener` is provided, it will return how many times the listener is found in the list of the listeners of the event. #### Type Parameters [Section titled “Type Parameters”](#type-parameters-3) ##### K [Section titled “K”](#k-3) `K` #### Parameters [Section titled “Parameters”](#parameters-9) ##### eventName [Section titled “eventName”](#eventname-2) The name of the event being listened for `string` | `symbol` ##### listener? [Section titled “listener?”](#listener-1) `Function` The event handler function #### Returns [Section titled “Returns”](#returns-11) `number` #### Since [Section titled “Since”](#since-4) v3.2.0 #### Inherited from [Section titled “Inherited from”](#inherited-from-5) `EventEmitter.listenerCount` *** ### listeners() [Section titled “listeners()”](#listeners) > **listeners**<`K`>(`eventName`): `Function`\[] Defined in: node\_modules/@types/node/events.d.ts:786 Returns a copy of the array of listeners for the event named `eventName`. ```js server.on('connection', (stream) => { console.log('someone connected!'); }); console.log(util.inspect(server.listeners('connection'))); // Prints: [ [Function] ] ``` #### Type Parameters [Section titled “Type Parameters”](#type-parameters-4) ##### K [Section titled “K”](#k-4) `K` #### Parameters [Section titled “Parameters”](#parameters-10) ##### eventName [Section titled “eventName”](#eventname-3) `string` | `symbol` #### Returns [Section titled “Returns”](#returns-12) `Function`\[] #### Since [Section titled “Since”](#since-5) v0.1.26 #### Inherited from [Section titled “Inherited from”](#inherited-from-6) `EventEmitter.listeners` *** ### load()? [Section titled “load()?”](#load) > `optional` **load**(`sid`, `fn`): `void` Defined in: [src/plugins/middleware/session.ts:123](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/session.ts#L123) Loads a session. #### Parameters [Section titled “Parameters”](#parameters-11) ##### sid [Section titled “sid”](#sid-2) `string` ##### fn [Section titled “fn”](#fn) (`err`, `session?`) => `void` #### Returns [Section titled “Returns”](#returns-13) `void` *** ### off() [Section titled “off()”](#off) > **off**<`K`>(`eventName`, `listener`): `this` Defined in: node\_modules/@types/node/events.d.ts:746 Alias for `emitter.removeListener()`. #### Type Parameters [Section titled “Type Parameters”](#type-parameters-5) ##### K [Section titled “K”](#k-5) `K` #### Parameters [Section titled “Parameters”](#parameters-12) ##### eventName [Section titled “eventName”](#eventname-4) `string` | `symbol` ##### listener [Section titled “listener”](#listener-2) (…`args`) => `void` #### Returns [Section titled “Returns”](#returns-14) `this` #### Since [Section titled “Since”](#since-6) v10.0.0 #### Inherited from [Section titled “Inherited from”](#inherited-from-7) `EventEmitter.off` *** ### on() [Section titled “on()”](#on) > **on**<`K`>(`eventName`, `listener`): `this` Defined in: node\_modules/@types/node/events.d.ts:628 Adds the `listener` function to the end of the listeners array for the event named `eventName`. No checks are made to see if the `listener` has already been added. Multiple calls passing the same combination of `eventName` and `listener` will result in the `listener` being added, and called, multiple times. ```js server.on('connection', (stream) => { console.log('someone connected!'); }); ``` Returns a reference to the `EventEmitter`, so that calls can be chained. By default, event listeners are invoked in the order they are added. The `emitter.prependListener()` method can be used as an alternative to add the event listener to the beginning of the listeners array. ```js import { EventEmitter } from 'node:events'; const myEE = new EventEmitter(); myEE.on('foo', () => console.log('a')); myEE.prependListener('foo', () => console.log('b')); myEE.emit('foo'); // Prints: // b // a ``` #### Type Parameters [Section titled “Type Parameters”](#type-parameters-6) ##### K [Section titled “K”](#k-6) `K` #### Parameters [Section titled “Parameters”](#parameters-13) ##### eventName [Section titled “eventName”](#eventname-5) The name of the event. `string` | `symbol` ##### listener [Section titled “listener”](#listener-3) (…`args`) => `void` The callback function #### Returns [Section titled “Returns”](#returns-15) `this` #### Since [Section titled “Since”](#since-7) v0.1.101 #### Inherited from [Section titled “Inherited from”](#inherited-from-8) `EventEmitter.on` *** ### once() [Section titled “once()”](#once) > **once**<`K`>(`eventName`, `listener`): `this` Defined in: node\_modules/@types/node/events.d.ts:658 Adds a **one-time** `listener` function for the event named `eventName`. The next time `eventName` is triggered, this listener is removed and then invoked. ```js server.once('connection', (stream) => { console.log('Ah, we have our first user!'); }); ``` Returns a reference to the `EventEmitter`, so that calls can be chained. By default, event listeners are invoked in the order they are added. The `emitter.prependOnceListener()` method can be used as an alternative to add the event listener to the beginning of the listeners array. ```js import { EventEmitter } from 'node:events'; const myEE = new EventEmitter(); myEE.once('foo', () => console.log('a')); myEE.prependOnceListener('foo', () => console.log('b')); myEE.emit('foo'); // Prints: // b // a ``` #### Type Parameters [Section titled “Type Parameters”](#type-parameters-7) ##### K [Section titled “K”](#k-7) `K` #### Parameters [Section titled “Parameters”](#parameters-14) ##### eventName [Section titled “eventName”](#eventname-6) The name of the event. `string` | `symbol` ##### listener [Section titled “listener”](#listener-4) (…`args`) => `void` The callback function #### Returns [Section titled “Returns”](#returns-16) `this` #### Since [Section titled “Since”](#since-8) v0.3.0 #### Inherited from [Section titled “Inherited from”](#inherited-from-9) `EventEmitter.once` *** ### prependListener() [Section titled “prependListener()”](#prependlistener) > **prependListener**<`K`>(`eventName`, `listener`): `this` Defined in: node\_modules/@types/node/events.d.ts:885 Adds the `listener` function to the *beginning* of the listeners array for the event named `eventName`. No checks are made to see if the `listener` has already been added. Multiple calls passing the same combination of `eventName` and `listener` will result in the `listener` being added, and called, multiple times. ```js server.prependListener('connection', (stream) => { console.log('someone connected!'); }); ``` Returns a reference to the `EventEmitter`, so that calls can be chained. #### Type Parameters [Section titled “Type Parameters”](#type-parameters-8) ##### K [Section titled “K”](#k-8) `K` #### Parameters [Section titled “Parameters”](#parameters-15) ##### eventName [Section titled “eventName”](#eventname-7) The name of the event. `string` | `symbol` ##### listener [Section titled “listener”](#listener-5) (…`args`) => `void` The callback function #### Returns [Section titled “Returns”](#returns-17) `this` #### Since [Section titled “Since”](#since-9) v6.0.0 #### Inherited from [Section titled “Inherited from”](#inherited-from-10) `EventEmitter.prependListener` *** ### prependOnceListener() [Section titled “prependOnceListener()”](#prependoncelistener) > **prependOnceListener**<`K`>(`eventName`, `listener`): `this` Defined in: node\_modules/@types/node/events.d.ts:901 Adds a **one-time**`listener` function for the event named `eventName` to the *beginning* of the listeners array. The next time `eventName` is triggered, this listener is removed, and then invoked. ```js server.prependOnceListener('connection', (stream) => { console.log('Ah, we have our first user!'); }); ``` Returns a reference to the `EventEmitter`, so that calls can be chained. #### Type Parameters [Section titled “Type Parameters”](#type-parameters-9) ##### K [Section titled “K”](#k-9) `K` #### Parameters [Section titled “Parameters”](#parameters-16) ##### eventName [Section titled “eventName”](#eventname-8) The name of the event. `string` | `symbol` ##### listener [Section titled “listener”](#listener-6) (…`args`) => `void` The callback function #### Returns [Section titled “Returns”](#returns-18) `this` #### Since [Section titled “Since”](#since-10) v6.0.0 #### Inherited from [Section titled “Inherited from”](#inherited-from-11) `EventEmitter.prependOnceListener` *** ### rawListeners() [Section titled “rawListeners()”](#rawlisteners) > **rawListeners**<`K`>(`eventName`): `Function`\[] Defined in: node\_modules/@types/node/events.d.ts:817 Returns a copy of the array of listeners for the event named `eventName`, including any wrappers (such as those created by `.once()`). ```js import { EventEmitter } from 'node:events'; const emitter = new EventEmitter(); emitter.once('log', () => console.log('log once')); // Returns a new Array with a function `onceWrapper` which has a property // `listener` which contains the original listener bound above const listeners = emitter.rawListeners('log'); const logFnWrapper = listeners[0]; // Logs "log once" to the console and does not unbind the `once` event logFnWrapper.listener(); // Logs "log once" to the console and removes the listener logFnWrapper(); emitter.on('log', () => console.log('log persistently')); // Will return a new Array with a single function bound by `.on()` above const newListeners = emitter.rawListeners('log'); // Logs "log persistently" twice newListeners[0](); emitter.emit('log'); ``` #### Type Parameters [Section titled “Type Parameters”](#type-parameters-10) ##### K [Section titled “K”](#k-10) `K` #### Parameters [Section titled “Parameters”](#parameters-17) ##### eventName [Section titled “eventName”](#eventname-9) `string` | `symbol` #### Returns [Section titled “Returns”](#returns-19) `Function`\[] #### Since [Section titled “Since”](#since-11) v9.4.0 #### Inherited from [Section titled “Inherited from”](#inherited-from-12) `EventEmitter.rawListeners` *** ### removeAllListeners() [Section titled “removeAllListeners()”](#removealllisteners) > **removeAllListeners**(`eventName?`): `this` Defined in: node\_modules/@types/node/events.d.ts:757 Removes all listeners, or those of the specified `eventName`. It is bad practice to remove listeners added elsewhere in the code, particularly when the `EventEmitter` instance was created by some other component or module (e.g. sockets or file streams). Returns a reference to the `EventEmitter`, so that calls can be chained. #### Parameters [Section titled “Parameters”](#parameters-18) ##### eventName? [Section titled “eventName?”](#eventname-10) `string` | `symbol` #### Returns [Section titled “Returns”](#returns-20) `this` #### Since [Section titled “Since”](#since-12) v0.1.26 #### Inherited from [Section titled “Inherited from”](#inherited-from-13) `EventEmitter.removeAllListeners` *** ### removeListener() [Section titled “removeListener()”](#removelistener) > **removeListener**<`K`>(`eventName`, `listener`): `this` Defined in: node\_modules/@types/node/events.d.ts:741 Removes the specified `listener` from the listener array for the event named `eventName`. ```js const callback = (stream) => { console.log('someone connected!'); }; server.on('connection', callback); // ... server.removeListener('connection', callback); ``` `removeListener()` will remove, at most, one instance of a listener from the listener array. If any single listener has been added multiple times to the listener array for the specified `eventName`, then `removeListener()` must be called multiple times to remove each instance. Once an event is emitted, all listeners attached to it at the time of emitting are called in order. This implies that any `removeListener()` or `removeAllListeners()` calls *after* emitting and *before* the last listener finishes execution will not remove them from`emit()` in progress. Subsequent events behave as expected. ```js import { EventEmitter } from 'node:events'; class MyEmitter extends EventEmitter {} const myEmitter = new MyEmitter(); const callbackA = () => { console.log('A'); myEmitter.removeListener('event', callbackB); }; const callbackB = () => { console.log('B'); }; myEmitter.on('event', callbackA); myEmitter.on('event', callbackB); // callbackA removes listener callbackB but it will still be called. // Internal listener array at time of emit [callbackA, callbackB] myEmitter.emit('event'); // Prints: // A // B // callbackB is now removed. // Internal listener array [callbackA] myEmitter.emit('event'); // Prints: // A ``` Because listeners are managed using an internal array, calling this will change the position indices of any listener registered *after* the listener being removed. This will not impact the order in which listeners are called, but it means that any copies of the listener array as returned by the `emitter.listeners()` method will need to be recreated. When a single function has been added as a handler multiple times for a single event (as in the example below), `removeListener()` will remove the most recently added instance. In the example the `once('ping')` listener is removed: ```js import { EventEmitter } from 'node:events'; const ee = new EventEmitter(); function pong() { console.log('pong'); } ee.on('ping', pong); ee.once('ping', pong); ee.removeListener('ping', pong); ee.emit('ping'); ee.emit('ping'); ``` Returns a reference to the `EventEmitter`, so that calls can be chained. #### Type Parameters [Section titled “Type Parameters”](#type-parameters-11) ##### K [Section titled “K”](#k-11) `K` #### Parameters [Section titled “Parameters”](#parameters-19) ##### eventName [Section titled “eventName”](#eventname-11) `string` | `symbol` ##### listener [Section titled “listener”](#listener-7) (…`args`) => `void` #### Returns [Section titled “Returns”](#returns-21) `this` #### Since [Section titled “Since”](#since-13) v0.1.26 #### Inherited from [Section titled “Inherited from”](#inherited-from-14) `EventEmitter.removeListener` *** ### set() [Section titled “set()”](#set) > **set**(`sid`, `session`, `callback?`): `void` Defined in: [src/plugins/middleware/session.ts:99](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/session.ts#L99) Stores a session. #### Parameters [Section titled “Parameters”](#parameters-20) ##### sid [Section titled “sid”](#sid-3) `string` ##### session [Section titled “session”](#session-1) [`SessionData`](/api/interfaces/sessiondata/) ##### callback? [Section titled “callback?”](#callback-5) (`err?`) => `void` #### Returns [Section titled “Returns”](#returns-22) `void` *** ### setMaxListeners() [Section titled “setMaxListeners()”](#setmaxlisteners) > **setMaxListeners**(`n`): `this` Defined in: node\_modules/@types/node/events.d.ts:767 By default `EventEmitter`s will print a warning if more than `10` listeners are added for a particular event. This is a useful default that helps finding memory leaks. The `emitter.setMaxListeners()` method allows the limit to be modified for this specific `EventEmitter` instance. The value can be set to `Infinity` (or `0`) to indicate an unlimited number of listeners. Returns a reference to the `EventEmitter`, so that calls can be chained. #### Parameters [Section titled “Parameters”](#parameters-21) ##### n [Section titled “n”](#n) `number` #### Returns [Section titled “Returns”](#returns-23) `this` #### Since [Section titled “Since”](#since-14) v0.3.5 #### Inherited from [Section titled “Inherited from”](#inherited-from-15) `EventEmitter.setMaxListeners` *** ### touch()? [Section titled “touch()?”](#touch) > `optional` **touch**(`sid`, `session`, `callback?`): `void` Defined in: [src/plugins/middleware/session.ts:107](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/session.ts#L107) Touches a session. #### Parameters [Section titled “Parameters”](#parameters-22) ##### sid [Section titled “sid”](#sid-4) `string` ##### session [Section titled “session”](#session-2) [`SessionData`](/api/interfaces/sessiondata/) ##### callback? [Section titled “callback?”](#callback-6) (`err?`) => `void` #### Returns [Section titled “Returns”](#returns-24) `void`
# ValidationConfig
Defined in: [src/plugins/middleware/validation.ts:7](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/validation.ts#L7) ## Properties [Section titled “Properties”](#properties) ### body? [Section titled “body?”](#body) > `optional` **body**: `any` Defined in: [src/plugins/middleware/validation.ts:8](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/validation.ts#L8) *** ### headers? [Section titled “headers?”](#headers) > `optional` **headers**: `any` Defined in: [src/plugins/middleware/validation.ts:11](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/validation.ts#L11) *** ### params? [Section titled “params?”](#params) > `optional` **params**: `any` Defined in: [src/plugins/middleware/validation.ts:10](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/validation.ts#L10) *** ### query? [Section titled “query?”](#query) > `optional` **query**: `any` Defined in: [src/plugins/middleware/validation.ts:9](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/middleware/validation.ts#L9)
# shokupan
## Enumerations [Section titled “Enumerations”](#enumerations) * [RouteParamType](/api/enumerations/routeparamtype/) ## Classes [Section titled “Classes”](#classes) * [AuthPlugin](/api/classes/authplugin/) * [ClusterPlugin](/api/classes/clusterplugin/) * [Container](/api/classes/container/) * [MemoryStore](/api/classes/memorystore/) * [ScalarPlugin](/api/classes/scalarplugin/) * [Shokupan](/api/classes/shokupan/) * [ShokupanContext](/api/classes/shokupancontext/) * [ShokupanResponse](/api/classes/shokupanresponse/) * [ValidationError](/api/classes/validationerror/) ## Interfaces [Section titled “Interfaces”](#interfaces) * [AuthConfig](/api/interfaces/authconfig/) * [AuthUser](/api/interfaces/authuser/) * [ClusterOptions](/api/interfaces/clusteroptions/) * [CompressionOptions](/api/interfaces/compressionoptions/) * [CookieOptions](/api/interfaces/cookieoptions/) * [CorsOptions](/api/interfaces/corsoptions/) * [DebugCollector](/api/interfaces/debugcollector/) * [HandlerStackItem](/api/interfaces/handlerstackitem/) * [OpenAPIOptions](/api/interfaces/openapioptions/) * [ProcessResult](/api/interfaces/processresult/) * [ProviderConfig](/api/interfaces/providerconfig/) * [RateLimitOptions](/api/interfaces/ratelimitoptions/) * [RequestOptions](/api/interfaces/requestoptions/) * [RouteMetadata](/api/interfaces/routemetadata/) * [SecurityHeadersOptions](/api/interfaces/securityheadersoptions/) * [ServerFactory](/api/interfaces/serverfactory/) * [SessionContext](/api/interfaces/sessioncontext/) * [SessionCookieOptions](/api/interfaces/sessioncookieoptions/) * [SessionData](/api/interfaces/sessiondata/) * [SessionOptions](/api/interfaces/sessionoptions/) * [ShokupanHooks](/api/interfaces/shokupanhooks/) * [ShokupanPlugin](/api/interfaces/shokupanplugin/) * [ShokupanPluginOptions](/api/interfaces/shokupanpluginoptions/) * [StaticServeHooks](/api/interfaces/staticservehooks/) * [StaticServeOptions](/api/interfaces/staticserveoptions/) * [Store](/api/interfaces/store/) * [ValidationConfig](/api/interfaces/validationconfig/) ## Type Aliases [Section titled “Type Aliases”](#type-aliases) * [DeepPartial](/api/type-aliases/deeppartial/) * [DefaultState](/api/type-aliases/defaultstate/) * [EmptyState](/api/type-aliases/emptystate/) * [GuardAPISpec](/api/type-aliases/guardapispec/) * [HeadersInit](/api/type-aliases/headersinit/) * [JSXRenderer](/api/type-aliases/jsxrenderer/) * [Method](/api/type-aliases/method/) * [MethodAPISpec](/api/type-aliases/methodapispec/) * [Middleware](/api/type-aliases/middleware/) * [NextFn](/api/type-aliases/nextfn/) * [RouteParams](/api/type-aliases/routeparams/) * [RouterAPISpec](/api/type-aliases/routerapispec/) * [ScalarPluginOptions](/api/type-aliases/scalarpluginoptions/) * [ShokupanConfig](/api/type-aliases/shokupanconfig/) * [ShokupanController](/api/type-aliases/shokupancontroller/) * [ShokupanHandler](/api/type-aliases/shokupanhandler/) * [ShokupanRequest](/api/type-aliases/shokupanrequest/) * [ShokupanRequestProps](/api/type-aliases/shokupanrequestprops/) * [ShokupanRoute](/api/type-aliases/shokupanroute/) * [ShokupanRouteConfig](/api/type-aliases/shokupanrouteconfig/) ## Variables [Section titled “Variables”](#variables) * [$appRoot](/api/variables/approot/) * [$childControllers](/api/variables/childcontrollers/) * [$childRouters](/api/variables/childrouters/) * [$controllerPath](/api/variables/controllerpath/) * [$dispatch](/api/variables/dispatch/) * [$isApplication](/api/variables/isapplication/) * [$isMounted](/api/variables/ismounted/) * [$isRouter](/api/variables/isrouter/) * [$middleware](/api/variables/middleware/) * [$mountPath](/api/variables/mountpath/) * [$parent](/api/variables/parent/) * [$routeArgs](/api/variables/routeargs/) * [$routeMethods](/api/variables/routemethods/) * [$routes](/api/variables/routes/) * [$routeSpec](/api/variables/routespec/) * [All](/api/variables/all/) * [Body](/api/variables/body/) * [Ctx](/api/variables/ctx/) * [Delete](/api/variables/delete/) * [Get](/api/variables/get/) * [Head](/api/variables/head/) * [Headers](/api/variables/headers/) * [HTTPMethods](/api/variables/httpmethods/) * [Options](/api/variables/options/) * [Param](/api/variables/param/) * [Patch](/api/variables/patch/) * [Post](/api/variables/post/) * [Put](/api/variables/put/) * [Query](/api/variables/query/) * [Req](/api/variables/req/) * [ShokupanRequest](/api/variables/shokupanrequest/) ## Functions [Section titled “Functions”](#functions) * [compileValidators](/api/functions/compilevalidators/) * [compose](/api/functions/compose/) * [Compression](/api/functions/compression/) * [Controller](/api/functions/controller/) * [Cors](/api/functions/cors/) * [enableOpenApiValidation](/api/functions/enableopenapivalidation/) * [Inject](/api/functions/inject/) * [Injectable](/api/functions/injectable/) * [openApiValidator](/api/functions/openapivalidator/) * [precompileValidators](/api/functions/precompilevalidators/) * [RateLimit](/api/functions/ratelimit/) * [RateLimitMiddleware](/api/functions/ratelimitmiddleware/) * [SecurityHeaders](/api/functions/securityheaders/) * [Session](/api/functions/session/) * [Spec](/api/functions/spec/) * [Use](/api/functions/use/) * [useExpress](/api/functions/useexpress/) * [valibot](/api/functions/valibot/) * [validate](/api/functions/validate/)
# DeepPartial
> **DeepPartial**<`T`> = `T` *extends* `Function` ? `T` : `T` *extends* `object` ? `{ [P in keyof T]?: DeepPartial }` : `T` Defined in: [src/util/types.ts:17](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L17) ## Type Parameters [Section titled “Type Parameters”](#type-parameters) ### T [Section titled “T”](#t) `T`
# DefaultState
> **DefaultState** = `Record`<`string`, `any`> Defined in: [src/util/types.ts:42](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L42) Default state type that allows any properties. This is the default if no state type is specified. ## Example [Section titled “Example”](#example) ```typescript const app = new Shokupan(); // Equivalent to: new Shokupan(); ```
# EmptyState
> **EmptyState** = `Record`<`string`, `never`> Defined in: [src/util/types.ts:30](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L30) Helper type for applications that don’t use ctx.state. Prevents accidental property access on state. ## Example [Section titled “Example”](#example) ```typescript const app = new Shokupan(); ```
# GuardAPISpec
> **GuardAPISpec** = [`DeepPartial`](/api/type-aliases/deeppartial/)<`OpenAPI.Operation`> Defined in: [src/util/types.ts:71](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L71)
# HeadersInit
> **HeadersInit** = `Headers` | `Record`<`string`, `string`> | \[`string`, `string`]\[] Defined in: [src/util/types.ts:7](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L7)
# JSXRenderer
> **JSXRenderer** = (`element`, `args?`) => `string` | `Promise`<`string`> Defined in: [src/util/types.ts:136](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L136) ## Parameters [Section titled “Parameters”](#parameters) ### element [Section titled “element”](#element) `any` ### args? [Section titled “args?”](#args) `unknown` ## Returns [Section titled “Returns”](#returns) `string` | `Promise`<`string`>
# Method
> **Method** = `"GET"` | `"POST"` | `"PUT"` | `"DELETE"` | `"PATCH"` | `"OPTIONS"` | `"HEAD"` | `"ALL"` Defined in: [src/util/types.ts:114](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L114)
# MethodAPISpec
> **MethodAPISpec** = `OpenAPI.Operation` Defined in: [src/util/types.ts:70](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L70)
# Middleware
> **Middleware** = (`ctx`, `next`) => `Promise`<`any`> | `any` & `object` Defined in: [src/util/types.ts:130](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L130) ## Type Declaration [Section titled “Type Declaration”](#type-declaration) ### isBuiltin? [Section titled “isBuiltin?”](#isbuiltin) > `optional` **isBuiltin**: `boolean` ### metadata? [Section titled “metadata?”](#metadata) > `optional` **metadata**: [`RouteMetadata`](/api/interfaces/routemetadata/) ### order? [Section titled “order?”](#order) > `optional` **order**: `number` ### pluginName? [Section titled “pluginName?”](#pluginname) > `optional` **pluginName**: `string`
# NextFn
> **NextFn** = () => `Promise`<`any`> Defined in: [src/util/types.ts:129](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L129) ## Returns [Section titled “Returns”](#returns) `Promise`<`any`>
# RouteParams
> **RouteParams**<`Path`> = `string` *extends* `Path` ? `Record`<`string`, `string`> : `ParsePathParams`<`Path`> *extends* `Record`<`string`, `never`> ? `Record`<`string`, `string`> : `ParsePathParams`<`Path`> Defined in: [src/util/types.ts:55](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L55) ## Type Parameters [Section titled “Type Parameters”](#type-parameters) ### Path [Section titled “Path”](#path) `Path` *extends* `string`
# RouterAPISpec
> **RouterAPISpec** = `OpenAPI.Operation` & `Pick`<`Required`<`OpenAPI.Operation`>, `"tags"`> & `object` Defined in: [src/util/types.ts:72](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L72) ## Type Declaration [Section titled “Type Declaration”](#type-declaration) ### group [Section titled “group”](#group) > **group**: `string`
# ScalarPluginOptions
> **ScalarPluginOptions** = `object` Defined in: [src/plugins/application/scalar.ts:12](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/application/scalar.ts#L12) ## Properties [Section titled “Properties”](#properties) ### baseDocument? [Section titled “baseDocument?”](#basedocument) > `optional` **baseDocument**: [`DeepPartial`](/api/type-aliases/deeppartial/)<`OpenAPI.Document`> Defined in: [src/plugins/application/scalar.ts:16](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/application/scalar.ts#L16) Base document to use for API reference. *** ### config? [Section titled “config?”](#config) > `optional` **config**: `Partial`<`ApiReferenceConfiguration`> Defined in: [src/plugins/application/scalar.ts:20](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/application/scalar.ts#L20) Configuration for API reference. *** ### enableStaticAnalysis? [Section titled “enableStaticAnalysis?”](#enablestaticanalysis) > `optional` **enableStaticAnalysis**: `boolean` Defined in: [src/plugins/application/scalar.ts:29](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/plugins/application/scalar.ts#L29) Whether to enable static analysis. When this is enabled, the plugin will run static analysis on the entrypoint and generate an OpenAPI document. This is useful for when you want to generate an OpenAPI document without having to manually define it. Only works with TypeScript entrypoints.
# ShokupanConfig
> **ShokupanConfig**<`T`> = [`DeepPartial`](/api/type-aliases/deeppartial/)<{\[`key`: `string`]: `any`; `autoBackpressureFeedback?`: `boolean`; `autoBackpressureLevel?`: `number`; `controllersOnly`: `boolean`; `development`: `boolean`; `enableAsyncLocalStorage`: `boolean`; `enableMiddlewareTracking`: `boolean`; `enableOpenApiGen`: `boolean`; `enableTracing?`: `boolean`; `hooks`: [`ShokupanHooks`](/api/interfaces/shokupanhooks/)<`T`> | [`ShokupanHooks`](/api/interfaces/shokupanhooks/)<`T`>\[]; `hostname`: `string`; `httpLogger`: (`ctx`) => `void`; `jsonParser?`: `"native"` | `"parse-json"` | `"secure-json-parse"`; `logger`: { `debug`: (`msg`, `props`) => `void`; `error`: (`msg`, `props`) => `void`; `fatal`: (`msg`, `props`) => `void`; `info`: (`msg`, `props`) => `void`; `verbose`: `boolean`; `warning`: (`msg`, `props`) => `void`; }; `middlewareTrackingMaxCapacity?`: `number`; `middlewareTrackingTTL?`: `number`; `port`: `number`; `readTimeout`: `number`; `renderer`: [`JSXRenderer`](/api/type-aliases/jsxrenderer/); `requestTimeout`: `number`; `reusePort`: `boolean`; `serverFactory`: [`ServerFactory`](/api/interfaces/serverfactory/); `validateStatusCodes`: `boolean`; `writeTimeout`: `number`; }> Defined in: [src/util/types.ts:245](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L245) ## Type Parameters [Section titled “Type Parameters”](#type-parameters) ### T [Section titled “T”](#t) `T` *extends* `Record`<`string`, `any`> = `Record`<`string`, `any`>
# ShokupanController
> **ShokupanController**<`T`> = (…`args`) => `T` & `object` Defined in: [src/util/types.ts:418](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L418) ## Type Declaration [Section titled “Type Declaration”](#type-declaration) ### \[$isRouter]? [Section titled “\[$isRouter\]?”](#isrouter) > `optional` **\[$isRouter]**: `undefined` ## Type Parameters [Section titled “Type Parameters”](#type-parameters) ### T [Section titled “T”](#t) `T` = `any`
# ShokupanHandler
> **ShokupanHandler**<`State`, `Params`> = (`ctx`, `next?`) => `Promise`<`any`> | `any` Defined in: [src/util/types.ts:109](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L109) ## Type Parameters [Section titled “Type Parameters”](#type-parameters) ### State [Section titled “State”](#state) `State` *extends* `Record`<`string`, `any`> = `Record`<`string`, `any`> ### Params [Section titled “Params”](#params) `Params` *extends* `Record`<`string`, `string`> = `Record`<`string`, `string`> ## Parameters [Section titled “Parameters”](#parameters) ### ctx [Section titled “ctx”](#ctx) [`ShokupanContext`](/api/classes/shokupancontext/)<`State`, `Params`> ### next? [Section titled “next?”](#next) [`NextFn`](/api/type-aliases/nextfn/) ## Returns [Section titled “Returns”](#returns) `Promise`<`any`> | `any`
# ShokupanRequest
> **ShokupanRequest**<`T`> = `ShokupanRequestBase` & `T` Defined in: [src/util/request.ts:40](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/request.ts#L40) This type is used to add properties to the request object. ## Type Parameters [Section titled “Type Parameters”](#type-parameters) ### T [Section titled “T”](#t) `T`
# ShokupanRequestProps
> **ShokupanRequestProps** = `object` Defined in: [src/util/request.ts:3](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/request.ts#L3) ## Properties [Section titled “Properties”](#properties) ### body [Section titled “body”](#body) > **body**: `any` Defined in: [src/util/request.ts:7](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/request.ts#L7) *** ### headers [Section titled “headers”](#headers) > **headers**: `Headers` Defined in: [src/util/request.ts:6](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/request.ts#L6) *** ### method [Section titled “method”](#method) > **method**: [`Method`](/api/type-aliases/method/) Defined in: [src/util/request.ts:4](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/request.ts#L4) *** ### url [Section titled “url”](#url) > **url**: `string` Defined in: [src/util/request.ts:5](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/request.ts#L5)
# ShokupanRoute
> **ShokupanRoute** = `object` Defined in: [src/util/types.ts:172](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L172) ## Properties [Section titled “Properties”](#properties) ### bakedHandler? [Section titled “bakedHandler?”](#bakedhandler) > `optional` **bakedHandler**: [`ShokupanHandler`](/api/type-aliases/shokupanhandler/) Defined in: [src/util/types.ts:197](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L197) Optimization: Handler with hooks baked in. Used by runtime router, while `handler` is used by OpenAPI generator. *** ### controller? [Section titled “controller?”](#controller) > `optional` **controller**: `any` Defined in: [src/util/types.ts:242](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L242) Controller instance this route belongs to *** ### group? [Section titled “group?”](#group) > `optional` **group**: `string` Defined in: [src/util/types.ts:205](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L205) Group for the route *** ### guards? [Section titled “guards?”](#guards) > `optional` **guards**: `object`\[] Defined in: [src/util/types.ts:209](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L209) Guards for the route #### handler [Section titled “handler”](#handler) > **handler**: [`ShokupanHandler`](/api/type-aliases/shokupanhandler/) Guard handler #### spec? [Section titled “spec?”](#spec) > `optional` **spec**: [`GuardAPISpec`](/api/type-aliases/guardapispec/) Guard OpenAPI spec *** ### handler [Section titled “handler”](#handler-1) > **handler**: [`ShokupanHandler`](/api/type-aliases/shokupanhandler/) Defined in: [src/util/types.ts:192](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L192) Route handler *** ### handlerSpec? [Section titled “handlerSpec?”](#handlerspec) > `optional` **handlerSpec**: [`MethodAPISpec`](/api/type-aliases/methodapispec/) Defined in: [src/util/types.ts:201](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L201) OpenAPI spec for the route *** ### hooks? [Section titled “hooks?”](#hooks) > `optional` **hooks**: [`ShokupanHooks`](/api/interfaces/shokupanhooks/) Defined in: [src/util/types.ts:230](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L230) Hooks from the router/route definition *** ### keys [Section titled “keys”](#keys) > **keys**: `string`\[] Defined in: [src/util/types.ts:188](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L188) Route parameters *** ### metadata? [Section titled “metadata?”](#metadata) > `optional` **metadata**: [`RouteMetadata`](/api/interfaces/routemetadata/) Defined in: [src/util/types.ts:234](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L234) Source metadata *** ### method [Section titled “method”](#method) > **method**: [`Method`](/api/type-aliases/method/) Defined in: [src/util/types.ts:176](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L176) HTTP method *** ### order? [Section titled “order?”](#order) > `optional` **order**: `number` Defined in: [src/util/types.ts:238](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L238) Order of the middleware *** ### path [Section titled “path”](#path) > **path**: `string` Defined in: [src/util/types.ts:180](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L180) Route path *** ### regex [Section titled “regex”](#regex) > **regex**: `RegExp` Defined in: [src/util/types.ts:184](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L184) Compiled regex for the route *** ### renderer? [Section titled “renderer?”](#renderer) > `optional` **renderer**: [`JSXRenderer`](/api/type-aliases/jsxrenderer/) Defined in: [src/util/types.ts:226](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L226) Custom JSX renderer for this route. *** ### requestTimeout? [Section titled “requestTimeout?”](#requesttimeout) > `optional` **requestTimeout**: `number` Defined in: [src/util/types.ts:222](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L222) Timeout for this specific route (milliseconds).
# ShokupanRouteConfig
> **ShokupanRouteConfig** = [`DeepPartial`](/api/type-aliases/deeppartial/)<{ `autoBackpressureFeedback`: `boolean`; `autoBackpressureLevel`: `number`; `controllersOnly`: `boolean`; `group`: `string`; `hooks`: [`ShokupanHooks`](/api/interfaces/shokupanhooks/) | [`ShokupanHooks`](/api/interfaces/shokupanhooks/)\[]; `name`: `string`; `openapi`: [`DeepPartial`](/api/type-aliases/deeppartial/)<`OpenAPI.Operation`>; `renderer`: [`JSXRenderer`](/api/type-aliases/jsxrenderer/); `requestTimeout`: `number`; }> Defined in: [src/util/types.ts:138](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L138)
# $appRoot
> `const` **$appRoot**: *typeof* `$appRoot` Defined in: [src/util/symbol.ts:2](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/symbol.ts#L2)
# $childControllers
> `const` **$childControllers**: *typeof* `$childControllers` Defined in: [src/util/symbol.ts:11](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/symbol.ts#L11)
# $childRouters
> `const` **$childRouters**: *typeof* `$childRouters` Defined in: [src/util/symbol.ts:10](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/symbol.ts#L10)
# $controllerPath
> `const` **$controllerPath**: *typeof* `$controllerPath` Defined in: [src/util/symbol.ts:6](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/symbol.ts#L6)
# $dispatch
> `const` **$dispatch**: *typeof* `$dispatch` Defined in: [src/util/symbol.ts:13](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/symbol.ts#L13)
# $isApplication
> `const` **$isApplication**: *typeof* `$isApplication` Defined in: [src/util/symbol.ts:1](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/symbol.ts#L1)
# $isMounted
> `const` **$isMounted**: *typeof* `$isMounted` Defined in: [src/util/symbol.ts:3](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/symbol.ts#L3)
# $isRouter
> `const` **$isRouter**: *typeof* `$isRouter` Defined in: [src/util/symbol.ts:8](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/symbol.ts#L8)
# $middleware
> `const` **$middleware**: *typeof* `$middleware` Defined in: [src/util/symbol.ts:7](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/symbol.ts#L7)
# $mountPath
> `const` **$mountPath**: *typeof* `$mountPath` Defined in: [src/util/symbol.ts:12](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/symbol.ts#L12)
# $parent
> `const` **$parent**: *typeof* `$parent` Defined in: [src/util/symbol.ts:9](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/symbol.ts#L9)
# $routeArgs
> `const` **$routeArgs**: *typeof* `$routeArgs` Defined in: [src/util/symbol.ts:5](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/symbol.ts#L5)
# $routeMethods
> `const` **$routeMethods**: *typeof* `$routeMethods` Defined in: [src/util/symbol.ts:4](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/symbol.ts#L4)
# $routes
> `const` **$routes**: *typeof* `$routes` Defined in: [src/util/symbol.ts:14](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/symbol.ts#L14)
# $routeSpec
> `const` **$routeSpec**: *typeof* `$routeSpec` Defined in: [src/util/symbol.ts:15](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/symbol.ts#L15)
# All
> `const` **All**: (`path`) => (`target`, `propertyKey`, `descriptor`) => `void` Defined in: [src/util/decorators.ts:155](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/decorators.ts#L155) Decorator: Binds a method to ANY HTTP verb. ## Parameters [Section titled “Parameters”](#parameters) ### path [Section titled “path”](#path) `string` = `"/"` ## Returns [Section titled “Returns”](#returns) > (`target`, `propertyKey`, `descriptor`): `void` ### Parameters [Section titled “Parameters”](#parameters-1) #### target [Section titled “target”](#target) `any` #### propertyKey [Section titled “propertyKey”](#propertykey) `string` #### descriptor [Section titled “descriptor”](#descriptor) `PropertyDescriptor` ### Returns [Section titled “Returns”](#returns-1) `void`
# Body
> `const` **Body**: (`name?`) => (`target`, `propertyKey`, `parameterIndex`) => `void` Defined in: [src/util/decorators.ts:59](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/decorators.ts#L59) Decorator: Binds a parameter to the request body. ## Parameters [Section titled “Parameters”](#parameters) ### name? [Section titled “name?”](#name) `string` ## Returns [Section titled “Returns”](#returns) > (`target`, `propertyKey`, `parameterIndex`): `void` ### Parameters [Section titled “Parameters”](#parameters-1) #### target [Section titled “target”](#target) `any` #### propertyKey [Section titled “propertyKey”](#propertykey) `string` #### parameterIndex [Section titled “parameterIndex”](#parameterindex) `number` ### Returns [Section titled “Returns”](#returns-1) `void`
# Ctx
> `const` **Ctx**: (`name?`) => (`target`, `propertyKey`, `parameterIndex`) => `void` Defined in: [src/util/decorators.ts:84](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/decorators.ts#L84) Decorator: Binds a parameter to the request context. ## Parameters [Section titled “Parameters”](#parameters) ### name? [Section titled “name?”](#name) `string` ## Returns [Section titled “Returns”](#returns) > (`target`, `propertyKey`, `parameterIndex`): `void` ### Parameters [Section titled “Parameters”](#parameters-1) #### target [Section titled “target”](#target) `any` #### propertyKey [Section titled “propertyKey”](#propertykey) `string` #### parameterIndex [Section titled “parameterIndex”](#parameterindex) `number` ### Returns [Section titled “Returns”](#returns-1) `void`
# Delete
> `const` **Delete**: (`path`) => (`target`, `propertyKey`, `descriptor`) => `void` Defined in: [src/util/decorators.ts:135](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/decorators.ts#L135) Decorator: Binds a method to the DELETE HTTP verb. ## Parameters [Section titled “Parameters”](#parameters) ### path [Section titled “path”](#path) `string` = `"/"` ## Returns [Section titled “Returns”](#returns) > (`target`, `propertyKey`, `descriptor`): `void` ### Parameters [Section titled “Parameters”](#parameters-1) #### target [Section titled “target”](#target) `any` #### propertyKey [Section titled “propertyKey”](#propertykey) `string` #### descriptor [Section titled “descriptor”](#descriptor) `PropertyDescriptor` ### Returns [Section titled “Returns”](#returns-1) `void`
# Get
> `const` **Get**: (`path`) => (`target`, `propertyKey`, `descriptor`) => `void` Defined in: [src/util/decorators.ts:120](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/decorators.ts#L120) Decorator: Binds a method to the GET HTTP verb. ## Parameters [Section titled “Parameters”](#parameters) ### path [Section titled “path”](#path) `string` = `"/"` ## Returns [Section titled “Returns”](#returns) > (`target`, `propertyKey`, `descriptor`): `void` ### Parameters [Section titled “Parameters”](#parameters-1) #### target [Section titled “target”](#target) `any` #### propertyKey [Section titled “propertyKey”](#propertykey) `string` #### descriptor [Section titled “descriptor”](#descriptor) `PropertyDescriptor` ### Returns [Section titled “Returns”](#returns-1) `void`
# Head
> `const` **Head**: (`path`) => (`target`, `propertyKey`, `descriptor`) => `void` Defined in: [src/util/decorators.ts:150](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/decorators.ts#L150) Decorator: Binds a method to the HEAD HTTP verb. ## Parameters [Section titled “Parameters”](#parameters) ### path [Section titled “path”](#path) `string` = `"/"` ## Returns [Section titled “Returns”](#returns) > (`target`, `propertyKey`, `descriptor`): `void` ### Parameters [Section titled “Parameters”](#parameters-1) #### target [Section titled “target”](#target) `any` #### propertyKey [Section titled “propertyKey”](#propertykey) `string` #### descriptor [Section titled “descriptor”](#descriptor) `PropertyDescriptor` ### Returns [Section titled “Returns”](#returns-1) `void`
# Headers
> `const` **Headers**: (`name?`) => (`target`, `propertyKey`, `parameterIndex`) => `void` Defined in: [src/util/decorators.ts:74](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/decorators.ts#L74) Decorator: Binds a parameter to the request headers. ## Parameters [Section titled “Parameters”](#parameters) ### name? [Section titled “name?”](#name) `string` ## Returns [Section titled “Returns”](#returns) > (`target`, `propertyKey`, `parameterIndex`): `void` ### Parameters [Section titled “Parameters”](#parameters-1) #### target [Section titled “target”](#target) `any` #### propertyKey [Section titled “propertyKey”](#propertykey) `string` #### parameterIndex [Section titled “parameterIndex”](#parameterindex) `number` ### Returns [Section titled “Returns”](#returns-1) `void`
# HTTPMethods
> `const` **HTTPMethods**: `string`\[] Defined in: [src/util/types.ts:113](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/types.ts#L113)
# Options
> `const` **Options**: (`path`) => (`target`, `propertyKey`, `descriptor`) => `void` Defined in: [src/util/decorators.ts:145](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/decorators.ts#L145) Decorator: Binds a method to the OPTIONS HTTP verb. ## Parameters [Section titled “Parameters”](#parameters) ### path [Section titled “path”](#path) `string` = `"/"` ## Returns [Section titled “Returns”](#returns) > (`target`, `propertyKey`, `descriptor`): `void` ### Parameters [Section titled “Parameters”](#parameters-1) #### target [Section titled “target”](#target) `any` #### propertyKey [Section titled “propertyKey”](#propertykey) `string` #### descriptor [Section titled “descriptor”](#descriptor) `PropertyDescriptor` ### Returns [Section titled “Returns”](#returns-1) `void`
# Param
> `const` **Param**: (`name?`) => (`target`, `propertyKey`, `parameterIndex`) => `void` Defined in: [src/util/decorators.ts:64](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/decorators.ts#L64) Decorator: Binds a parameter to the request parameters. ## Parameters [Section titled “Parameters”](#parameters) ### name? [Section titled “name?”](#name) `string` ## Returns [Section titled “Returns”](#returns) > (`target`, `propertyKey`, `parameterIndex`): `void` ### Parameters [Section titled “Parameters”](#parameters-1) #### target [Section titled “target”](#target) `any` #### propertyKey [Section titled “propertyKey”](#propertykey) `string` #### parameterIndex [Section titled “parameterIndex”](#parameterindex) `number` ### Returns [Section titled “Returns”](#returns-1) `void`
# Patch
> `const` **Patch**: (`path`) => (`target`, `propertyKey`, `descriptor`) => `void` Defined in: [src/util/decorators.ts:140](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/decorators.ts#L140) Decorator: Binds a method to the PATCH HTTP verb. ## Parameters [Section titled “Parameters”](#parameters) ### path [Section titled “path”](#path) `string` = `"/"` ## Returns [Section titled “Returns”](#returns) > (`target`, `propertyKey`, `descriptor`): `void` ### Parameters [Section titled “Parameters”](#parameters-1) #### target [Section titled “target”](#target) `any` #### propertyKey [Section titled “propertyKey”](#propertykey) `string` #### descriptor [Section titled “descriptor”](#descriptor) `PropertyDescriptor` ### Returns [Section titled “Returns”](#returns-1) `void`
# Post
> `const` **Post**: (`path`) => (`target`, `propertyKey`, `descriptor`) => `void` Defined in: [src/util/decorators.ts:125](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/decorators.ts#L125) Decorator: Binds a method to the POST HTTP verb. ## Parameters [Section titled “Parameters”](#parameters) ### path [Section titled “path”](#path) `string` = `"/"` ## Returns [Section titled “Returns”](#returns) > (`target`, `propertyKey`, `descriptor`): `void` ### Parameters [Section titled “Parameters”](#parameters-1) #### target [Section titled “target”](#target) `any` #### propertyKey [Section titled “propertyKey”](#propertykey) `string` #### descriptor [Section titled “descriptor”](#descriptor) `PropertyDescriptor` ### Returns [Section titled “Returns”](#returns-1) `void`
# Put
> `const` **Put**: (`path`) => (`target`, `propertyKey`, `descriptor`) => `void` Defined in: [src/util/decorators.ts:130](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/decorators.ts#L130) Decorator: Binds a method to the PUT HTTP verb. ## Parameters [Section titled “Parameters”](#parameters) ### path [Section titled “path”](#path) `string` = `"/"` ## Returns [Section titled “Returns”](#returns) > (`target`, `propertyKey`, `descriptor`): `void` ### Parameters [Section titled “Parameters”](#parameters-1) #### target [Section titled “target”](#target) `any` #### propertyKey [Section titled “propertyKey”](#propertykey) `string` #### descriptor [Section titled “descriptor”](#descriptor) `PropertyDescriptor` ### Returns [Section titled “Returns”](#returns-1) `void`
# Query
> `const` **Query**: (`name?`) => (`target`, `propertyKey`, `parameterIndex`) => `void` Defined in: [src/util/decorators.ts:69](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/decorators.ts#L69) Decorator: Binds a parameter to the request query string. ## Parameters [Section titled “Parameters”](#parameters) ### name? [Section titled “name?”](#name) `string` ## Returns [Section titled “Returns”](#returns) > (`target`, `propertyKey`, `parameterIndex`): `void` ### Parameters [Section titled “Parameters”](#parameters-1) #### target [Section titled “target”](#target) `any` #### propertyKey [Section titled “propertyKey”](#propertykey) `string` #### parameterIndex [Section titled “parameterIndex”](#parameterindex) `number` ### Returns [Section titled “Returns”](#returns-1) `void`
# Req
> `const` **Req**: (`name?`) => (`target`, `propertyKey`, `parameterIndex`) => `void` Defined in: [src/util/decorators.ts:79](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/decorators.ts#L79) Decorator: Binds a parameter to the request object. ## Parameters [Section titled “Parameters”](#parameters) ### name? [Section titled “name?”](#name) `string` ## Returns [Section titled “Returns”](#returns) > (`target`, `propertyKey`, `parameterIndex`): `void` ### Parameters [Section titled “Parameters”](#parameters-1) #### target [Section titled “target”](#target) `any` #### propertyKey [Section titled “propertyKey”](#propertykey) `string` #### parameterIndex [Section titled “parameterIndex”](#parameterindex) `number` ### Returns [Section titled “Returns”](#returns-1) `void`
# ShokupanRequest
> **ShokupanRequest**: `ShokupanConstructor` Defined in: [src/util/request.ts:40](https://github.com/knackstedt/shokupan/blob/727617c4fb0568f10a27e5ba685e1a2ce8b13b7e/src/util/request.ts#L40) This class is used to create a request object. It is used to make requests to the router.
# Context
> Understanding the ShokupanContext API
The `ShokupanContext` object provides a rich API for handling requests and responses. It’s passed to every route handler and middleware function. ## Context Properties [Section titled “Context Properties”](#context-properties) ### Request Information [Section titled “Request Information”](#request-information) ```typescript app.get('/info', (ctx) => { return { // HTTP method method: ctx.method, // 'GET', 'POST', etc. // Request path path: ctx.path, // '/info' // Full URL url: ctx.url, // 'http://localhost:3000/info?q=test' // Path parameters params: ctx.params, // { id: '123' } from /users/:id // Query parameters (URLSearchParams) query: ctx.query, // URLSearchParams object // Headers (Headers object) headers: ctx.headers, // Client IP address (string) ip: ctx.ip, // Host (string) host: ctx.host, // localhost:3000 // Hostname (string) hostname: ctx.hostname, // localhost // Protocol (string) protocol: ctx.protocol, // http // Secure context (boolean) secure: ctx.secure, // false // Origin (string) origin: ctx.origin // http://localhost:3000 }; }); ``` ### Request Object [Section titled “Request Object”](#request-object) Access the raw Request object: ```typescript app.post('/upload', async (ctx) => { // Raw Request object const request = ctx.req; // Use Request methods const formData = await request.formData(); const blob = await request.blob(); return { uploaded: true }; }); ``` ### State [Section titled “State”](#state) Share data across middleware and handlers: ```typescript app.use(async (ctx, next) => { ctx.state.requestId = crypto.randomUUID(); ctx.state.startTime = Date.now(); return next(); }); app.get('/', (ctx) => { return { requestId: ctx.state.requestId, duration: Date.now() - ctx.state.startTime }; }); ``` ## Reading Request Data [Section titled “Reading Request Data”](#reading-request-data) ### Query Parameters [Section titled “Query Parameters”](#query-parameters) ```typescript app.get('/search', (ctx) => { // Get single value const q = ctx.query.get('q'); // Get with default const page = ctx.query.get('page') || '1'; // Get all values for a key const tags = ctx.query.getAll('tag'); // Check if exists const hasFilter = ctx.query.has('filter'); return { q, page, tags, hasFilter }; }); // GET /search?q=test&page=2&tag=news&tag=tech ``` ### Path Parameters [Section titled “Path Parameters”](#path-parameters) ```typescript app.get('/users/:userId/posts/:postId', (ctx) => { const { userId, postId } = ctx.params; return { user: userId, post: postId }; }); // GET /users/123/posts/456 // params = { userId: '123', postId: '456' } ``` ### Request Body [Section titled “Request Body”](#request-body) The `body()` method automatically parses JSON and form data: ```typescript app.post('/users', async (ctx) => { // Auto-parsed based on Content-Type const data = await ctx.body(); return { created: data }; }); ``` For specific formats: ```typescript app.post('/data', async (ctx) => { // JSON const json = await ctx.req.json(); // Text const text = await ctx.req.text(); // Form data const form = await ctx.req.formData(); // Binary const blob = await ctx.req.blob(); const buffer = await ctx.req.arrayBuffer(); return { received: true }; }); ``` ### Headers [Section titled “Headers”](#headers) ```typescript app.get('/headers', (ctx) => { // Get single header const auth = ctx.headers.get('authorization'); const userAgent = ctx.headers.get('user-agent'); // Check if exists const hasAuth = ctx.headers.has('authorization'); // Get all headers const allHeaders = Object.fromEntries(ctx.headers.entries()); return { auth, userAgent, hasAuth, allHeaders }; }); ``` ### Cookies [Section titled “Cookies”](#cookies) ```typescript app.get('/cookies', (ctx) => { const cookieHeader = ctx.headers.get('cookie'); // Parse cookies manually or use a plugin const cookies = Object.fromEntries( cookieHeader?.split(';').map(c => { const [key, val] = c.trim().split('='); return [key, val]; }) || [] ); return { cookies }; }); ``` ## Sending Responses [Section titled “Sending Responses”](#sending-responses) ### JSON Response [Section titled “JSON Response”](#json-response) ```typescript app.get('/json', (ctx) => { // Implicit JSON (most common) return { message: 'Hello' }; // Explicit JSON with status return ctx.json({ message: 'Created' }, 201); // Add headers ctx.set('X-Custom', 'value'); return ctx.json({ data: 'value' }); }); ``` ### Text Response [Section titled “Text Response”](#text-response) ```typescript app.get('/text', (ctx) => { return ctx.text('Hello, World!'); // With status return ctx.text('Not Found', 404); }); ``` ### HTML Response [Section titled “HTML Response”](#html-response) ### JSX Response [Section titled “JSX Response”](#jsx-response) Render JSX elements directly: ```typescript app.get('/jsx', (ctx) => { return ctx.jsx(Hello, World!
); // With props return ctx.jsx(); }); ``` To use JSX, ensure you have configured a JSX renderer in your `ShokupanConfig` (if not using the default) or are using a transpiler that supports it. ### File Response [Section titled “File Response”](#file-response) ```typescript app.get('/download', (ctx) => { return ctx.file('./path/to/file.pdf', { type: 'application/pdf' }); }); ``` ### Redirect [Section titled “Redirect”](#redirect) ```typescript app.get('/old', (ctx) => { return ctx.redirect('/new'); // Permanent redirect return ctx.redirect('/new', 301); // Temporary redirect (default) return ctx.redirect('/new', 302); }); ``` ### Status Code [Section titled “Status Code”](#status-code) ```typescript app.delete('/users/:id', (ctx) => { // No content return ctx.status(204); // Or with send return ctx.send(null, { status: 204 }); }); ``` ### Custom Response [Section titled “Custom Response”](#custom-response) Return a Response object directly: ```typescript app.get('/custom', (ctx) => { return new Response('Custom response', { status: 200, headers: { 'Content-Type': 'text/plain', 'X-Custom-Header': 'value' } }); }); ``` ## Response Headers [Section titled “Response Headers”](#response-headers) ### Set Headers [Section titled “Set Headers”](#set-headers) ```typescript app.get('/headers', (ctx) => { // Set single header ctx.set('X-Custom-Header', 'value'); // Set multiple headers ctx.set('X-Version', '1.0'); ctx.set('X-Powered-By', 'Shokupan'); return { message: 'Check headers' }; }); ``` ### Set Cookies [Section titled “Set Cookies”](#set-cookies) ```typescript app.get('/set-cookie', (ctx) => { ctx.setCookie('sessionId', 'abc123', { httpOnly: true, secure: true, sameSite: 'lax', maxAge: 3600, // 1 hour path: '/', domain: 'example.com' }); return { message: 'Cookie set' }; }); ``` ## Advanced Features [Section titled “Advanced Features”](#advanced-features) ### Client IP [Section titled “Client IP”](#client-ip) ```typescript app.get('/ip', (ctx) => { return { ip: ctx.ip }; }); ``` ### Response Builder [Section titled “Response Builder”](#response-builder) Access the response builder: ```typescript app.get('/response', (ctx) => { const response = ctx.response; // Build custom response response.headers.set('X-Custom', 'value'); response.status = 201; return { data: 'value' }; }); ``` ### Session (with Session Plugin) [Section titled “Session (with Session Plugin)”](#session-with-session-plugin) ```typescript import { Session } from 'shokupan'; app.use(Session({ secret: 'secret' })); app.get('/login', (ctx) => { ctx.session.user = { id: '123', name: 'Alice' }; return { message: 'Logged in' }; }); app.get('/profile', (ctx) => { if (!ctx.session.user) { return ctx.json({ error: 'Not authenticated' }, 401); } return ctx.session.user; }); ``` ## Type Safety [Section titled “Type Safety”](#type-safety) Add types to your context: ```typescript import { ShokupanContext } from 'shokupan'; interface User { id: string; name: string; } interface MyContext { user?: User; } app.get('/typed', (ctx: ShokupanContext) => { // ctx.state.user is typed as User | undefined return { user: ctx.state.user }; }); ``` ## Next Steps [Section titled “Next Steps”](#next-steps) * [Routing](/core/routing/) - Learn about routing patterns * [Middleware](/core/middleware/) - Create custom middleware * [API Reference](../api/interfaces/SessionContext.md) - Complete Context API reference
# Controllers
> Use decorators for structured class-based routing
Controllers provide a structured, class-based approach to defining routes using TypeScript decorators. This pattern is familiar to NestJS developers and helps organize your application. ## Basic Controller [Section titled “Basic Controller”](#basic-controller) Create a controller using the `@Get`, `@Post`, etc. decorators: ```typescript import { Get, Post, Put, Delete, Param, Body } from 'shokupan'; export class UserController { @Get('/') async getAllUsers() { return { users: ['Alice', 'Bob', 'Charlie'] }; } @Get('/:id') async getUserById(@Param('id') id: string) { return { id, name: 'Alice', email: 'alice@example.com' }; } @Post('/') async createUser(@Body() body: any) { return { message: 'User created', data: body }; } @Put('/:id') async updateUser( @Param('id') id: string, @Body() body: any ) { return { message: 'User updated', id, data: body }; } @Delete('/:id') async deleteUser(@Param('id') id: string) { return { message: 'User deleted', id }; } } ``` ## Mounting Controllers [Section titled “Mounting Controllers”](#mounting-controllers) Mount a controller to a base path: ```typescript import { Shokupan } from 'shokupan'; const app = new Shokupan(); // Mount at /api/users app.mount('/api/users', UserController); // Routes available: // GET /api/users // GET /api/users/:id // POST /api/users // PUT /api/users/:id // DELETE /api/users/:id ``` ## HTTP Method Decorators [Section titled “HTTP Method Decorators”](#http-method-decorators) All HTTP methods are supported: ```typescript import { Get, Post, Put, Patch, Delete, Options, Head, All } from 'shokupan'; export class ApiController { @Get('/resource') getResource() { } @Post('/resource') createResource() { } @Put('/resource/:id') replaceResource() { } @Patch('/resource/:id') updateResource() { } @Delete('/resource/:id') deleteResource() { } @Options('/resource') resourceOptions() { } @Head('/resource') resourceHead() { } @All('/webhook') handleWebhook() { } } ``` ## Parameter Decorators [Section titled “Parameter Decorators”](#parameter-decorators) Extract data from requests using parameter decorators: ### @Param [Section titled “@Param”](#param) Extract path parameters: ```typescript @Get('/users/:userId/posts/:postId') getPost( @Param('userId') userId: string, @Param('postId') postId: string ) { return { userId, postId }; } ``` ### @Query [Section titled “@Query”](#query) Extract query parameters: ```typescript @Get('/search') search( @Query('q') searchQuery: string, @Query('page') page?: string ) { return { query: searchQuery, page: page || '1' }; } ``` ### @Body [Section titled “@Body”](#body) Access the request body: ```typescript @Post('/users') async createUser(@Body() userData: any) { // userData is already parsed return { created: userData }; } ``` ### @Headers [Section titled “@Headers”](#headers) Access request headers: ```typescript @Get('/protected') getData( @Headers('authorization') token: string, @Headers('user-agent') userAgent: string ) { return { token, userAgent }; } ``` ### @Ctx [Section titled “@Ctx”](#ctx) Access the full context object: ```typescript import { Ctx, ShokupanContext } from 'shokupan'; @Get('/info') getInfo(@Ctx() ctx: ShokupanContext) { return { method: ctx.method, path: ctx.path, headers: Object.fromEntries(ctx.headers.entries()) }; } ``` ### @Req [Section titled “@Req”](#req) Access the request object directly: ```typescript import { Req } from 'shokupan'; @Post('/upload') async upload(@Req() req: Request) { const formData = await req.formData(); return { uploaded: true }; } ``` ## Controller Middleware [Section titled “Controller Middleware”](#controller-middleware) Apply middleware to all routes in a controller using `@Use`: ```typescript import { Use } from 'shokupan'; const authMiddleware = async (ctx, next) => { if (!ctx.headers.get('authorization')) { return ctx.json({ error: 'Unauthorized' }, 401); } ctx.state.user = { id: '123' }; return next(); }; @Use(authMiddleware) export class AdminController { @Get('/dashboard') getDashboard(@Ctx() ctx: any) { return { user: ctx.state.user }; } @Get('/settings') getSettings(@Ctx() ctx: any) { return { user: ctx.state.user }; } } ``` ## Method-Level Middleware [Section titled “Method-Level Middleware”](#method-level-middleware) Apply middleware to specific methods: ```typescript const logRequest = async (ctx, next) => { console.log(`${ctx.method} ${ctx.path}`); return next(); }; export class UserController { @Get('/') getAllUsers() { return { users: [] }; } @Post('/') @Use(logRequest) createUser(@Body() body: any) { return { created: body }; } } ``` ## Dependency Injection [Section titled “Dependency Injection”](#dependency-injection) Use the DI container in controllers: ```typescript import { Container } from 'shokupan'; class UserService { getUsers() { return ['Alice', 'Bob']; } } Container.register('userService', UserService); export class UserController { private userService: UserService; constructor() { this.userService = Container.resolve('userService'); } @Get('/') getAllUsers() { return { users: this.userService.getUsers() }; } } ``` ## Multiple Controllers [Section titled “Multiple Controllers”](#multiple-controllers) Organize your app with multiple controllers: user.controller.ts ```typescript export class UserController { @Get('/') getUsers() { } } // post.controller.ts export class PostController { @Get('/') getPosts() { } } // app.ts import { Shokupan } from 'shokupan'; const app = new Shokupan(); app.mount('/api/users', UserController); app.mount('/api/posts', PostController); ``` ## TypeScript Configuration [Section titled “TypeScript Configuration”](#typescript-configuration) For controllers to work, enable decorators in `tsconfig.json`: ```json { "compilerOptions": { "experimentalDecorators": true, "emitDecoratorMetadata": true } } ``` ## Next Steps [Section titled “Next Steps”](#next-steps) * [Middleware](/core/middleware/) - Create custom middleware * [Dependency Injection](/advanced/dependency-injection/) - Advanced DI patterns * [Validation](/plugins/validation/) - Validate controller inputs
# Middleware
> Add cross-cutting concerns with middleware
Middleware functions have access to the request context and can control the request flow. They’re perfect for cross-cutting concerns like logging, authentication, and error handling. ## Basic Middleware [Section titled “Basic Middleware”](#basic-middleware) Middleware receives the context and a `next` function: ```typescript import { Middleware } from 'shokupan'; const logger: Middleware = async (ctx, next) => { console.log(`${ctx.method} ${ctx.path}`); const start = Date.now(); const result = await next(); console.log(`${ctx.method} ${ctx.path} - ${Date.now() - start}ms`); return result; }; app.use(logger); ``` Important Always `return` the result from `next()`. Forgetting this will cause issues with response handling. ## Global Middleware [Section titled “Global Middleware”](#global-middleware) Apply middleware to all routes: ```typescript // Logging app.use(async (ctx, next) => { console.log(`→ ${ctx.method} ${ctx.path}`); return next(); }); // Request ID app.use(async (ctx, next) => { ctx.state.requestId = crypto.randomUUID(); return next(); }); // Add routes after middleware app.get('/', (ctx) => { return { requestId: ctx.state.requestId }; }); ``` ## Route-Specific Middleware [Section titled “Route-Specific Middleware”](#route-specific-middleware) Apply middleware to specific routes: ```typescript const authenticate = async (ctx, next) => { const token = ctx.headers.get('authorization'); if (!token) { return ctx.json({ error: 'Unauthorized' }, 401); } // Validate token and attach user ctx.state.user = { id: '123', name: 'Alice' }; return next(); }; // Apply to single route app.get('/protected', authenticate, (ctx) => { return { user: ctx.state.user }; }); // Apply to multiple handlers app.post('/admin', authenticate, checkAdmin, (ctx) => { return { admin: true }; } ); ``` ## Router Middleware [Section titled “Router Middleware”](#router-middleware) Apply middleware to all routes in a router: ```typescript import { ShokupanRouter } from 'shokupan'; const apiRouter = new ShokupanRouter(); // Middleware for all routes in this router apiRouter.use(authenticate); apiRouter.get('/users', (ctx) => ({ users: [] })); apiRouter.get('/posts', (ctx) => ({ posts: [] })); app.mount('/api', apiRouter); ``` ## Controller Middleware [Section titled “Controller Middleware”](#controller-middleware) Use the `@Use` decorator for controllers: ```typescript import { Use } from 'shokupan'; // On entire controller @Use(authenticate) export class AdminController { @Get('/dashboard') getDashboard() { } } // On specific methods export class UserController { @Get('/') @Use(rateLimit) getUsers() { } } ``` ## Error Handling [Section titled “Error Handling”](#error-handling) Middleware can catch and handle errors: ```typescript const errorHandler: Middleware = async (ctx, next) => { try { return await next(); } catch (error) { console.error('Error:', error); return ctx.json({ error: 'Internal Server Error', message: error.message }, 500); } }; // Add early in middleware chain app.use(errorHandler); ``` ## Request Timing [Section titled “Request Timing”](#request-timing) Track request duration: ```typescript const timing: Middleware = async (ctx, next) => { const start = Date.now(); const result = await next(); const duration = Date.now() - start; // Add timing header ctx.set('X-Response-Time', `${duration}ms`); return result; }; app.use(timing); ``` ## Authentication [Section titled “Authentication”](#authentication) Create an authentication middleware: ```typescript const authenticate: Middleware = async (ctx, next) => { const token = ctx.headers.get('authorization')?.replace('Bearer ', ''); if (!token) { return ctx.json({ error: 'No token provided' }, 401); } try { // Verify JWT token const user = await verifyToken(token); ctx.state.user = user; return next(); } catch (error) { return ctx.json({ error: 'Invalid token' }, 401); } }; ``` ## Request ID [Section titled “Request ID”](#request-id) Add unique request IDs: ```typescript const requestId: Middleware = async (ctx, next) => { const id = crypto.randomUUID(); ctx.state.requestId = id; ctx.set('X-Request-ID', id); return next(); }; app.use(requestId); app.get('/', (ctx) => { console.log(`Request ID: ${ctx.state.requestId}`); return { requestId: ctx.state.requestId }; }); ``` ## CORS Headers [Section titled “CORS Headers”](#cors-headers) Simple CORS middleware (use [CORS plugin](/plugins/cors/) for production): ```typescript const cors: Middleware = async (ctx, next) => { ctx.set('Access-Control-Allow-Origin', '*'); ctx.set('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE'); ctx.set('Access-Control-Allow-Headers', 'Content-Type, Authorization'); if (ctx.method === 'OPTIONS') { return ctx.status(204); } return next(); }; app.use(cors); ``` ## Conditional Middleware [Section titled “Conditional Middleware”](#conditional-middleware) Apply middleware conditionally: ```typescript const conditionalAuth: Middleware = async (ctx, next) => { // Skip auth for public endpoints if (ctx.path.startsWith('/public')) { return next(); } // Require auth for all other endpoints return authenticate(ctx, next); }; app.use(conditionalAuth); ``` ## Middleware Order [Section titled “Middleware Order”](#middleware-order) Middleware executes in the order it’s added: ```typescript // ✅ Correct order app.use(errorHandler); // 1. Error handling first app.use(logger); // 2. Logging app.use(authenticate); // 3. Authentication app.use(rateLimit); // 4. Rate limiting // Routes app.get('/', handler); // Request flow: // errorHandler → logger → authenticate → rateLimit → handler // Response flow (reversed): // handler → rateLimit → authenticate → logger → errorHandler ``` ## Modifying Responses [Section titled “Modifying Responses”](#modifying-responses) Middleware can modify responses: ```typescript const addHeaders: Middleware = async (ctx, next) => { const result = await next(); // Add custom headers to response ctx.set('X-Powered-By', 'Shokupan'); ctx.set('X-Version', '1.0.0'); return result; }; app.use(addHeaders); ``` ## State Sharing [Section titled “State Sharing”](#state-sharing) Use `ctx.state` to share data between middleware: ```typescript const loadUser: Middleware = async (ctx, next) => { const userId = ctx.query.get('userId'); if (userId) { ctx.state.user = await fetchUser(userId); } return next(); }; const checkPermissions: Middleware = async (ctx, next) => { if (!ctx.state.user?.isAdmin) { return ctx.json({ error: 'Forbidden' }, 403); } return next(); }; app.get('/admin', loadUser, checkPermissions, (ctx) => { return { user: ctx.state.user }; }); ``` ## Built-in Plugins [Section titled “Built-in Plugins”](#built-in-plugins) Shokupan provides many built-in middleware plugins: ```typescript import { Cors, Compression, RateLimit, SecurityHeaders } from 'shokupan'; app.use(Cors()); app.use(Compression()); app.use(RateLimit({ windowMs: 15 * 60 * 1000, max: 100 })); app.use(SecurityHeaders()); ``` See the [Plugins](/plugins/cors/) section for more details. ## Next Steps [Section titled “Next Steps”](#next-steps) * [Context API](/core/context/) - Full context reference * [CORS Plugin](/plugins/cors/) - Configure CORS * [Rate Limiting](/plugins/rate-limiting/) - Prevent abuse * [Authentication](/plugins/authentication/) - OAuth2 support
# Routing
> Learn about routing in Shokupan
Shokupan supports Express-style routing with a clean, intuitive API. Routes can be defined using HTTP method helpers or the generic `add()` method. ## Basic Routes [Section titled “Basic Routes”](#basic-routes) Define routes for different HTTP methods: ```typescript import { Shokupan } from 'shokupan'; const app = new Shokupan(); // GET request app.get('/users', (ctx) => { return { users: ['Alice', 'Bob'] }; }); // POST request app.post('/users', async (ctx) => { const body = await ctx.body(); return { created: body }; }); // PUT, PATCH, DELETE app.put('/users/:id', (ctx) => ({ updated: ctx.params.id })); app.patch('/users/:id', (ctx) => ({ patched: ctx.params.id })); app.delete('/users/:id', (ctx) => ({ deleted: ctx.params.id })); // HEAD, OPTIONS app.head('/users', (ctx) => ctx.status(200)); app.options('/users', (ctx) => ctx.status(200)); // Match all HTTP methods app.all('/webhook', (ctx) => ({method: ctx.method})); ``` ## Path Parameters [Section titled “Path Parameters”](#path-parameters) Extract dynamic values from the URL path: ```typescript // Single parameter app.get('/users/:id', (ctx) => { const userId = ctx.params.id; return { id: userId, name: 'Alice' }; }); // Multiple parameters app.get('/posts/:postId/comments/:commentId', (ctx) => { return { postId: ctx.params.postId, commentId: ctx.params.commentId }; }); // Optional segments with wildcards app.get('/files/*', (ctx) => { // Matches /files/anything/here return { path: ctx.path }; }); ``` ## Query Strings [Section titled “Query Strings”](#query-strings) Access query parameters using the `query` property: ```typescript app.get('/search', (ctx) => { const query = ctx.query.get('q'); const page = ctx.query.get('page') || '1'; const limit = ctx.query.get('limit') || '10'; return { query, page: parseInt(page), limit: parseInt(limit), results: [] }; }); // GET /search?q=shokupan&page=2&limit=20 ``` ## Routers [Section titled “Routers”](#routers) Group related routes using `ShokupanRouter`: ```typescript import { ShokupanRouter } from 'shokupan'; const apiRouter = new ShokupanRouter(); apiRouter.get('/users', (ctx) => ({ users: [] })); apiRouter.get('/posts', (ctx) => ({ posts: [] })); apiRouter.get('/comments', (ctx) => ({ comments: [] })); // Mount router under /api prefix app.mount('/api', apiRouter); // Available at: // GET /api/users // GET /api/posts // GET /api/comments ``` ### Nested Routers [Section titled “Nested Routers”](#nested-routers) Routers can be nested for better organization: ```typescript const v1Router = new ShokupanRouter(); const v2Router = new ShokupanRouter(); v1Router.get('/users', (ctx) => ({ version: 1, users: [] })); v2Router.get('/users', (ctx) => ({ version: 2, users: [] })); app.mount('/api/v1', v1Router); app.mount('/api/v2', v2Router); ``` ## Route Handlers [Section titled “Route Handlers”](#route-handlers) Handlers receive a [context object](/api/context/) and can return various response types: ```typescript // Return JSON (most common) app.get('/json', (ctx) => { return { message: 'Hello' }; }); // Return text app.get('/text', (ctx) => { return ctx.text('Hello, World!'); }); // Return HTML app.get('/html', (ctx) => { return ctx.html('Hello
'); }); // Return Response directly app.get('/custom', (ctx) => { return new Response('Custom', { status: 200, headers: { 'X-Custom': 'value' } }); }); // Async handlers app.get('/async', async (ctx) => { const data = await fetchFromDatabase(); return { data }; }); ``` ## Multiple Handlers (Middleware Chain) [Section titled “Multiple Handlers (Middleware Chain)”](#multiple-handlers-middleware-chain) Pass multiple handlers to create a middleware chain: ```typescript const authenticate = async (ctx, next) => { if (!ctx.headers.get('authorization')) { return ctx.json({ error: 'Unauthorized' }, 401); } return next(); }; const authorize = async (ctx, next) => { // Check permissions return next(); }; app.get('/protected', authenticate, authorize, (ctx) => { return { secret: 'data' }; } ); ``` ## Route Groups [Section titled “Route Groups”](#route-groups) Apply middleware to multiple routes: ```typescript const authRouter = new ShokupanRouter(); // This middleware applies to all routes in this router authRouter.use(authenticate); authRouter.get('/profile', (ctx) => ({ profile: {} })); authRouter.get('/settings', (ctx) => ({ settings: {} })); authRouter.post('/logout', (ctx) => ({ message: 'Logged out' })); app.mount('/auth', authRouter); ``` ## Route Order [Section titled “Route Order”](#route-order) Routes are matched in the order they are defined: ```typescript // ✅ Specific route first app.get('/users/me', (ctx) => { return { current: 'user' }; }); app.get('/users/:id', (ctx) => { return { id: ctx.params.id }; }); // ❌ Wrong order - /users/me would never match app.get('/users/:id', (ctx) => { return { id: ctx.params.id }; }); app.get('/users/me', (ctx) => { return { current: 'user' }; // Never reached! }); ``` ## OpenAPI Metadata [Section titled “OpenAPI Metadata”](#openapi-metadata) Add OpenAPI documentation to your routes: ```typescript app.get('/users/:id', { summary: 'Get user by ID', description: 'Retrieves a single user', tags: ['Users'], parameters: [{ name: 'id', in: 'path', required: true, schema: { type: 'string' } }], responses: { 200: { description: 'User found', content: { 'application/json': { schema: { type: 'object', properties: { id: { type: 'string' }, name: { type: 'string' } } } } } } } }, (ctx) => { return { id: ctx.params.id, name: 'Alice' }; }); ``` ## Next Steps [Section titled “Next Steps”](#next-steps) * [Controllers](/core/controllers/) - Use decorators for organized routing * [Middleware](/core/middleware/) - Add cross-cutting concerns * [Context API](/api/context/) - Full context reference
# Static Files
> Serve static files and directories
Shokupan provides built-in support for serving static files with optional directory listing. ## Basic Usage [Section titled “Basic Usage”](#basic-usage) Serve files from a directory: ```typescript import { Shokupan } from 'shokupan'; const app = new Shokupan(); // Serve static files from ./public app.static('/public', { root: './public' }); app.listen(); ``` Now files in `./public` are accessible: * `./public/style.css` → `http://localhost:3000/public/style.css` * `./public/script.js` → `http://localhost:3000/public/script.js` * `./public/images/logo.png` → `http://localhost:3000/public/images/logo.png` ## Directory Listing [Section titled “Directory Listing”](#directory-listing) Enable directory browsing: ```typescript app.static('/files', { root: './files', listDirectory: true // Enable directory listing }); ``` When you visit `http://localhost:3000/files/`, you’ll see a list of files and subdirectories. ## Multiple Static Directories [Section titled “Multiple Static Directories”](#multiple-static-directories) Serve from multiple directories: ```typescript // Public assets app.static('/public', { root: './public', listDirectory: true }); // Images app.static('/images', { root: './assets/images', listDirectory: false }); // JavaScript bundles app.static('/js', { root: './dist/js', listDirectory: false }); // CSS stylesheets app.static('/css', { root: './dist/css', listDirectory: false }); ``` ## Root Path [Section titled “Root Path”](#root-path) Serve files at the root path: ```typescript // Serve from root app.static('/', { root: './public' }); // Now accessible at: // ./public/index.html → http://localhost:3000/index.html ``` ## Typical Project Structure [Section titled “Typical Project Structure”](#typical-project-structure) ```plaintext my-app/ ├── public/ │ ├── index.html │ ├── favicon.ico │ ├── css/ │ │ └── style.css │ ├── js/ │ │ └── app.js │ └── images/ │ └── logo.png └── src/ └── index.ts ``` Configuration: ```typescript app.static('/public', { root: './public', listDirectory: true }); // Or serve at root for SPA app.static('/', { root: './public' }); ``` ## SPA (Single Page Application) [Section titled “SPA (Single Page Application)”](#spa-single-page-application) For SPAs, serve your build directory and handle client-side routing: ```typescript import { Shokupan } from 'shokupan'; const app = new Shokupan(); // API routes app.get('/api/users', (ctx) => ({ users: [] })); app.get('/api/posts', (ctx) => ({ posts: [] })); // Serve static files app.static('/', { root: './dist' }); // Fallback to index.html for client-side routing app.get('/*', (ctx) => { return ctx.file('./dist/index.html', { type: 'text/html' }); }); app.listen(); ``` ## File Types [Section titled “File Types”](#file-types) Shokupan automatically sets the correct `Content-Type` header based on file extension: * `.html` → `text/html` * `.css` → `text/css` * `.js` → `application/javascript` * `.json` → `application/json` * `.png` → `image/png` * `.jpg`, `.jpeg` → `image/jpeg` * `.svg` → `image/svg+xml` * `.pdf` → `application/pdf` * And many more… ## Security Considerations [Section titled “Security Considerations”](#security-considerations) Security Be careful when enabling directory listing in production. Only enable it for directories you want to be publicly browsable. ```typescript // ✅ Safe - specific public directory app.static('/public', { root: './public', listDirectory: true }); // ❌ Dangerous - entire project app.static('/', { root: '.', listDirectory: true }); ``` ## Caching Headers [Section titled “Caching Headers”](#caching-headers) Add cache control headers: ```typescript const staticMiddleware = async (ctx, next) => { const result = await next(); // Add cache headers for static assets if (ctx.path.startsWith('/public')) { ctx.set('Cache-Control', 'public, max-age=31536000'); } return result; }; app.use(staticMiddleware); app.static('/public', { root: './public' }); ``` ## Custom 404 [Section titled “Custom 404”](#custom-404) Handle missing static files: ```typescript app.static('/files', { root: './files', listDirectory: true }); // Fallback for 404 app.get('/files/*', (ctx) => { return ctx.html('File Not Found
', 404); }); ``` ## Development vs Production [Section titled “Development vs Production”](#development-vs-production) Different configurations for environments: ```typescript const isDev = process.env.NODE_ENV !== 'production'; app.static('/public', { root: './public', listDirectory: isDev // Only in development }); if (isDev) { // Development-specific static routes app.static('/docs', { root: './docs', listDirectory: true }); } ``` ## Next Steps [Section titled “Next Steps”](#next-steps) * [Routing](/core/routing/) - Learn about dynamic routing * [Middleware](/core/middleware/) - Add caching and compression * [Compression Plugin](/plugins/compression/) - Compress static assets
# Configuration
> Configure your Shokupan application
The `Shokupan` class accepts a configuration object to customize behavior. ## Basic Configuration [Section titled “Basic Configuration”](#basic-configuration) ```typescript const app = new Shokupan({ port: 3000, hostname: 'localhost', development: process.env.NODE_ENV !== 'production' }); ``` ## Options Reference [Section titled “Options Reference”](#options-reference) ### Server Options [Section titled “Server Options”](#server-options) | Option | Type | Default | Description | | :-------------- | :-------------- | :------------ | :------------------------------------------------- | | `port` | `number` | `3000` | The port the server should listen on. | | `hostname` | `string` | `'localhost'` | The hostname to bind to. | | `reusePort` | `boolean` | `false` | Allow multiple processes to bind to the same port. | | `serverFactory` | `ServerFactory` | `Bun.serve` | Custom server factory (e.g., for Node.js support). | ### Application Options [Section titled “Application Options”](#application-options) | Option | Type | Default | Description | | :------------------------ | :-------- | :------ | :---------------------------------------------------------------------------------------- | | `development` | `boolean` | `auto` | Enable development mode (affects error pages, etc.). | | `enableAsyncLocalStorage` | `boolean` | `false` | Enable `AsyncLocalStorage` for request-scoped globals. | | `controllersOnly` | `boolean` | `false` | If true, disables `app.get()`, `app.post()` etc., enforcing controller-only architecture. | ### Features [Section titled “Features”](#features) | Option | Type | Default | Description | | :------------------------- | :-------- | :------ | :----------------------------------------------------------------------- | | `enableTracing` | `boolean` | `false` | Enable OpenTelemetry tracing integration. | | `enableOpenApiGen` | `boolean` | `true` | Enable automatic OpenAPI specification generation. | | `enableMiddlewareTracking` | `boolean` | `false` | Track middleware execution for debugging (required for Debug Dashboard). | ### Timeouts & Limits [Section titled “Timeouts & Limits”](#timeouts--limits) | Option | Type | Default | Description | | :--------------- | :------- | :------------- | :------------------------------------------- | | `readTimeout` | `number` | `30000` | Timeout for reading the request body (ms). | | `requestTimeout` | `number` | `0` (disabled) | Global timeout for processing requests (ms). | ### Auto Backpressure [Section titled “Auto Backpressure”](#auto-backpressure) Protect your server from overload by shedding load when CPU usage is high. | Option | Type | Default | Description | | :------------------------- | :-------- | :------ | :---------------------------------------------------------- | | `autoBackpressureFeedback` | `boolean` | `false` | Enable automatic load shedding. | | `autoBackpressureLevel` | `number` | `60` | CPU usage % threshold to start rejecting requests with 503. |
# Installation
> Install Shokupan and set up your first project
## Prerequisites [Section titled “Prerequisites”](#prerequisites) Shokupan requires [Bun](https://bun.sh/) to be installed on your system. ### Install Bun [Section titled “Install Bun”](#install-bun) If you don’t have Bun installed yet: ```bash # macOS, Linux, and WSL curl -fsSL https://bun.sh/install | bash # Windows (PowerShell) powershell -c "irm bun.sh/install.ps1|iex" ``` Verify the installation: ```bash bun --version ``` ## Installing Shokupan [Section titled “Installing Shokupan”](#installing-shokupan) Install Shokupan in your project: ```bash bun add shokupan ``` ## Create Your First App [Section titled “Create Your First App”](#create-your-first-app) ### 1. Initialize a new project [Section titled “1. Initialize a new project”](#1-initialize-a-new-project) ```bash mkdir my-shokupan-app cd my-shokupan-app bun init -y ``` ### 2. Install Shokupan [Section titled “2. Install Shokupan”](#2-install-shokupan) ```bash bun add shokupan ``` ### 3. Create your server [Section titled “3. Create your server”](#3-create-your-server) Create a file named `index.ts`: ```typescript import { Shokupan } from 'shokupan'; const app = new Shokupan({ port: 3000, development: true }); app.get('/', (ctx) => { return { message: 'Hello, Shokupan!' }; }); app.get('/users/:id', (ctx) => { return { id: ctx.params.id, name: 'Alice', email: 'alice@example.com' }; }); app.post('/users', async (ctx) => { const body = await ctx.body(); return { message: 'User created', data: body }; }); console.log('🍞 Server running at http://localhost:3000'); app.listen(); ``` ### 4. Run your server [Section titled “4. Run your server”](#4-run-your-server) ```bash bun run index.ts ``` Your server is now running! Open `http://localhost:3000` in your browser. ## Development Mode [Section titled “Development Mode”](#development-mode) For automatic reloading during development, use the `--watch` flag: ```bash bun --watch index.ts ``` Now your server will automatically restart when you make changes to your code. ## Project Structure [Section titled “Project Structure”](#project-structure) A typical Shokupan project structure might look like: ```plaintext my-shokupan-app/ ├── src/ │ ├── controllers/ │ │ ├── user.controller.ts │ │ └── post.controller.ts │ ├── middleware/ │ │ ├── auth.ts │ │ └── logger.ts │ ├── services/ │ │ └── user.service.ts │ └── main.ts ├── package.json └── tsconfig.json ``` ## TypeScript Configuration [Section titled “TypeScript Configuration”](#typescript-configuration) For the best experience, configure your `tsconfig.json`: ```json { "compilerOptions": { "target": "ESNext", "module": "ESNext", "moduleResolution": "bundler", "lib": ["ESNext"], "types": ["bun-types"], "experimentalDecorators": true, "emitDecoratorMetadata": true, "verbatimModuleSyntax": true, "skipLibCheck": true, "esModuleInterop": true } } ``` The important settings for Shokupan are: * `experimentalDecorators: true` - Required for controller decorators * `emitDecoratorMetadata: true` - Enables metadata for dependency injection ## Next Steps [Section titled “Next Steps”](#next-steps) Now that you have Shokupan installed, learn about: * [Quick Start Guide](/getting-started/quick-start/) - Build your first real application * [Routing](/core/routing/) - Learn about routing and path parameters * [Controllers](/core/controllers/) - Use decorators for structured APIs * [Middleware](/core/middleware/) - Add cross-cutting concerns
# Quick Start
> Build your first Shokupan application
This guide will walk you through building a simple RESTful API with Shokupan. ## What We’ll Build [Section titled “What We’ll Build”](#what-well-build) A simple TODO API with the following features: * List all todos * Get a single todo * Create a new todo * Update a todo * Delete a todo ## Basic Setup [Section titled “Basic Setup”](#basic-setup) First, make sure you have [Shokupan installed](/getting-started/installation/). Create a new file `app.ts`: ```typescript import { Shokupan } from 'shokupan'; const app = new Shokupan({ port: 3000, development: true }); // In-memory storage (use a database in production!) const todos: Array<{ id: number; title: string; completed: boolean }> = []; let nextId = 1; // Routes will go here app.listen(); console.log('🍞 Server running at http://localhost:3000'); ``` ## Adding Routes [Section titled “Adding Routes”](#adding-routes) ### List All Todos [Section titled “List All Todos”](#list-all-todos) ```typescript app.get('/todos', (ctx) => { return { todos }; }); ``` ### Get Single Todo [Section titled “Get Single Todo”](#get-single-todo) ```typescript app.get('/todos/:id', (ctx) => { const id = parseInt(ctx.params.id); const todo = todos.find(t => t.id === id); if (!todo) { return ctx.json({ error: 'Todo not found' }, 404); } return { todo }; }); ``` ### Create Todo [Section titled “Create Todo”](#create-todo) ```typescript app.post('/todos', async (ctx) => { const body = await ctx.body(); const todo = { id: nextId++, title: body.title, completed: false }; todos.push(todo); return ctx.json({ todo }, 201); }); ``` ### Update Todo [Section titled “Update Todo”](#update-todo) ```typescript app.put('/todos/:id', async (ctx) => { const id = parseInt(ctx.params.id); const todo = todos.find(t => t.id === id); if (!todo) { return ctx.json({ error: 'Todo not found' }, 404); } const body = await ctx.body(); if (body.title !== undefined) todo.title = body.title; if (body.completed !== undefined) todo.completed = body.completed; return { todo }; }); ``` ### Delete Todo [Section titled “Delete Todo”](#delete-todo) ```typescript app.delete('/todos/:id', (ctx) => { const id = parseInt(ctx.params.id); const index = todos.findIndex(t => t.id === id); if (index === -1) { return ctx.json({ error: 'Todo not found' }, 404); } todos.splice(index, 1); return { message: 'Todo deleted' }; }); ``` ## Adding Validation [Section titled “Adding Validation”](#adding-validation) Let’s add validation using Zod: ```bash bun add zod ``` Update your todo creation route: ```typescript import { validate } from 'shokupan'; import { z } from 'zod'; const createTodoSchema = z.object({ title: z.string().min(1, 'Title is required'), }); app.post('/todos', validate({ body: createTodoSchema }), async (ctx) => { const body = await ctx.body(); const todo = { id: nextId++, title: body.title, completed: false }; todos.push(todo); return ctx.json({ todo }, 201); } ); ``` ## Adding Middleware [Section titled “Adding Middleware”](#adding-middleware) Let’s add a simple logging middleware: ```typescript app.use(async (ctx, next) => { const start = Date.now(); console.log(`→ ${ctx.method} ${ctx.path}`); const result = await next(); const duration = Date.now() - start; console.log(`← ${ctx.method} ${ctx.path} - ${duration}ms`); return result; }); ``` ## Using Controllers [Section titled “Using Controllers”](#using-controllers) For better organization, let’s refactor using controllers: ```typescript import { Controller, Get, Post, Put, Delete, Param, Body, Ctx } from 'shokupan'; import { validate } from 'shokupan'; import { z } from 'zod'; const todos: Array<{ id: number; title: string; completed: boolean }> = []; let nextId = 1; const createTodoSchema = z.object({ title: z.string().min(1), }); export class TodoController { @Get('/') getAllTodos() { return { todos }; } @Get('/:id') getTodo(@Param('id') idStr: string, @Ctx() ctx: any) { const id = parseInt(idStr); const todo = todos.find(t => t.id === id); if (!todo) { return ctx.json({ error: 'Todo not found' }, 404); } return { todo }; } @Post('/') async createTodo(@Body() body: any) { const todo = { id: nextId++, title: body.title, completed: false }; todos.push(todo); return { todo }; } @Put('/:id') async updateTodo( @Param('id') idStr: string, @Body() body: any, @Ctx() ctx: any ) { const id = parseInt(idStr); const todo = todos.find(t => t.id === id); if (!todo) { return ctx.json({ error: 'Todo not found' }, 404); } if (body.title !== undefined) todo.title = body.title; if (body.completed !== undefined) todo.completed = body.completed; return { todo }; } @Delete('/:id') deleteTodo(@Param('id') idStr: string, @Ctx() ctx: any) { const id = parseInt(idStr); const index = todos.findIndex(t => t.id === id); if (index === -1) { return ctx.json({ error: 'Todo not found' }, 404); } todos.splice(index, 1); return { message: 'Todo deleted' }; } } // Mount the controller app.mount('/todos', TodoController); ``` ## Testing the API [Section titled “Testing the API”](#testing-the-api) Start your server: ```bash bun run app.ts ``` Test with curl: ```bash # Create a todo curl -X POST http://localhost:3000/todos \ -H "Content-Type: application/json" \ -d '{"title": "Learn Shokupan"}' # Get all todos curl http://localhost:3000/todos # Get a specific todo curl http://localhost:3000/todos/1 # Update a todo curl -X PUT http://localhost:3000/todos/1 \ -H "Content-Type: application/json" \ -d '{"completed": true}' # Delete a todo curl -X DELETE http://localhost:3000/todos/1 ``` ## Next Steps [Section titled “Next Steps”](#next-steps) Great! You’ve built your first Shokupan API. Now explore: * [Routing](/core/routing/) - Advanced routing patterns * [Middleware](/core/middleware/) - Create custom middleware * [Validation](/plugins/validation/) - Deep dive into validation * [Authentication](/plugins/authentication/) - Add OAuth2 authentication * [OpenAPI](/advanced/openapi/) - Generate API documentation
# Advanced Features
> Deep dive into advanced Shokupan features.
## Automatic Backpressure [Section titled “Automatic Backpressure”](#automatic-backpressure) Protect your server from overload by shedding load when CPU usage is high. This functionality is built-in and requires no external dependencies. ### Configuration [Section titled “Configuration”](#configuration) ```typescript const app = new Shokupan({ // Monitor CPU and reject requests when usage > 80% autoBackpressureFeedback: true, autoBackpressureLevel: 80 }); ``` ### Behavior [Section titled “Behavior”](#behavior) * Passively monitors system CPU usage. * If usage exceeds `autoBackpressureLevel`, new requests are immediately rejected with `503 Service Unavailable`. * This prevents the event loop from becoming completely unresponsive during spikes. ## Middleware Tracking [Section titled “Middleware Tracking”](#middleware-tracking) For debugging complex applications, you can enable middleware tracking to see the exact execution path of a request. ### Configuration [Section titled “Configuration”](#configuration-1) ```typescript const app = new Shokupan({ enableMiddlewareTracking: true }); ``` ### Usage [Section titled “Usage”](#usage) When enabled, the `ctx.handlerStack` property will contain an array of all handlers and middleware that have executed for the current request. This is also required for the [Debug Dashboard](/plugins/debug-dashboard) to visualize the request flow.
# CLI Tools
> Shokupan command-line tools
Shokupan includes a CLI for scaffolding and code generation. ## Installation [Section titled “Installation”](#installation) ```bash # Install globally bun add -g shokupan # Or use with bunx bunx shokupan ``` ## Commands [Section titled “Commands”](#commands) ### Generate Controller [Section titled “Generate Controller”](#generate-controller) ```bash shokupan generate controller User # or skp g controller User ``` Generates: ```typescript import { Get, Post, Put, Delete, Param, Body } from 'shokupan'; export class UserController { @Get('/') async getAll() { return { users: [] }; } @Get('/:id') async getById(@Param('id') id: string) { return { id }; } @Post('/') async create(@Body() body: any) { return { created: body }; } @Put('/:id') async update(@Param('id') id: string, @Body() body: any) { return { id, updated: body }; } @Delete('/:id') async delete(@Param('id') id: string) { return { id, deleted: true }; } } ``` ### Generate Middleware [Section titled “Generate Middleware”](#generate-middleware) ```bash skp g middleware auth ``` ### Generate Plugin [Section titled “Generate Plugin”](#generate-plugin) ```bash skp g plugin custom ``` ## Next Steps [Section titled “Next Steps”](#next-steps) * [Controllers](/core/controllers/) - Learn about controllers * [Middleware](/core/middleware/) - Create custom middleware
# Deployment
> Deploy your Shokupan application
## Using Bun [Section titled “Using Bun”](#using-bun) ```bash bun run src/index.ts ``` ## Node.js & Deno [Section titled “Node.js & Deno”](#nodejs--deno) Shokupan is built for Bun, but can run on Node.js and Deno using the server adapter. ### Node.js [Section titled “Node.js”](#nodejs) Use the `createHttpServer` factory: ```typescript import { Shokupan, createHttpServer } from 'shokupan'; const app = new Shokupan({ serverFactory: createHttpServer() }); app.listen(3000); ``` Then run with `node`: ```bash node dist/index.js ``` ### Deno [Section titled “Deno”](#deno) Deno support is experimental but uses the same adapter pattern if needed, or runs natively if Deno implements `Bun.serve` compatibility layer in the future. Currently, use the Node compatibility layer in Deno: ```bash deno run -A dist/index.js ``` ```dockerfile FROM oven/bun:1 WORKDIR /app COPY package.json bun.lock ./ RUN bun install --production COPY . . EXPOSE 3000 CMD ["bun", "run", "src/index.ts"] ``` Build and run: ```bash docker build -t my-app . docker run -p 3000:3000 my-app ``` ## Environment Variables [Section titled “Environment Variables”](#environment-variables) Create a `.env` file: ```bash PORT=3000 NODE_ENV=production DATABASE_URL=postgresql://... JWT_SECRET=your-secret ``` Load in your app: ```typescript const app = new Shokupan({ port: parseInt(process.env.PORT || '3000'), development: process.env.NODE_ENV !== 'production' }); ``` ## Production Checklist [Section titled “Production Checklist”](#production-checklist) * [ ] Use environment variables for secrets * [ ] Enable HTTPS * [ ] Set security headers * [ ] Configure CORS properly * [ ] Add rate limiting * [ ] Use production database * [ ] Set up logging * [ ] Configure monitoring
# Global Type Augmentation
> This guide shows how to use TypeScript's **module augmentation** to globally extend `ShokupanContext` types, similar to how `express-session` extends the Express `Request` type.
## Overview [Section titled “Overview”](#overview) By default, `ShokupanContext` uses generic types that must be explicitly provided: ```typescript const app = new Shokupan(); const router = new ShokupanRouter(); ``` However, for **decorator-based controllers**, there’s no direct connection to the app instance, making it difficult to get type safety. Module augmentation solves this problem by **globally** extending the context types. ## Basic Module Augmentation [Section titled “Basic Module Augmentation”](#basic-module-augmentation) Create a TypeScript declaration file (e.g., `src/types/shokupan.d.ts`): ```typescript import 'shokupan'; // Define your application state interface MyAppState { userId: string; requestId: string; session: { id: string; data: Record; }; } // Augment the ShokupanContext module declare module 'shokupan' { interface ShokupanContext { // Override the state property with your custom type state: MyAppState; } } ``` **Important:** Your `tsconfig.json` must include this file: ```json { "compilerOptions": { "types": ["./src/types/shokupan.d.ts"] }, "include": ["src/**/*"] } ``` ## Using Augmented Types in Controllers [Section titled “Using Augmented Types in Controllers”](#using-augmented-types-in-controllers) Once augmented, **all** decorator controllers automatically get typed `ctx.state`: ```typescript import { Get, Post, Ctx, Body } from 'shokupan'; import { ShokupanContext } from 'shokupan'; export class UserController { @Get('/:id') async getUser(@Ctx() ctx: ShokupanContext) { // ✅ ctx.state is now typed as MyAppState const userId = ctx.state.userId; // ✅ Type-safe! const sessionId = ctx.state.session.id; // ✅ Type-safe! return { userId, sessionId }; } @Post('/create') async createUser(@Body() body: any, @Ctx() ctx: ShokupanContext) { // ✅ Full IntelliSense for state ctx.state.requestId; // ✅ Works! return ctx.json({ created: true }); } } ``` ## Advanced: Extending Multiple Properties [Section titled “Advanced: Extending Multiple Properties”](#advanced-extending-multiple-properties) You can augment other context properties as well: ```typescript import 'shokupan'; interface CustomUser { id: string; email: string; role: 'admin' | 'user'; } declare module 'shokupan' { interface ShokupanContext { // Custom state state: { user?: CustomUser; requestId: string; startTime: number; }; // Add custom methods getCurrentUser(): CustomUser | undefined; // Add custom properties (e.g., from plugins) session: { get(key: string): any; set(key: string, value: any): void; }; } } ``` Then implement the methods in middleware: ```typescript app.use(async (ctx, next) => { // Add the custom method (ctx as any).getCurrentUser = () => ctx.state.user; return next(); }); ``` ## Comparison: Augmentation vs. Generics [Section titled “Comparison: Augmentation vs. Generics”](#comparison-augmentation-vs-generics) ### Module Augmentation (Global) [Section titled “Module Augmentation (Global)”](#module-augmentation-global) **✅ Pros:** * Works automatically in decorator controllers * No need to pass generics everywhere * Plugin-friendly (plugins can augment globally) * Similar to Express/Koa patterns **❌ Cons:** * Global modification (affects all contexts) * Less explicit * Can be harder to track which middleware sets what **Best for:** Decorator-based controllers, Express-style apps ### Generic Types (Explicit) [Section titled “Generic Types (Explicit)”](#generic-types-explicit) **✅ Pros:** * Explicit and clear * Type safety enforced at compile time * Different routers can have different state types * Better for large apps with multiple contexts **❌ Cons:** * Verbose (must specify generics) * Doesn’t work well with decorator controllers * More boilerplate **Best for:** Router-based architecture, type-strict apps ## Hybrid Approach (Recommended) [Section titled “Hybrid Approach (Recommended)”](#hybrid-approach-recommended) You can use **both** approaches: ```typescript // Global augmentation for common properties declare module 'shokupan' { interface ShokupanContext { state: { requestId: string; timestamp: number; }; } } // Router-specific state extends the global interface AdminState extends ShokupanContext['state'] { adminUser: { id: string; permissions: string[]; }; } class AdminRouter extends ShokupanRouter { constructor() { super(); this.get('/dashboard', (ctx) => { // Has both requestId (global) AND adminUser (router-specific) ctx.state.requestId; // ✅ From global augmentation ctx.state.adminUser; // ✅ From AdminState generic }); } } ``` ## Examples from Popular Libraries [Section titled “Examples from Popular Libraries”](#examples-from-popular-libraries) This pattern is used by many TypeScript libraries: ### express-session [Section titled “express-session”](#express-session) ```typescript declare module 'express-serve-static-core' { interface Request { session: Session & Partial; } } ``` ### passport [Section titled “passport”](#passport) ```typescript declare module 'express-serve-static-core' { interface Request { user?: Express.User; login(user: Express.User, done: (err: any) => void): void; logout(): void; } } ``` ### Shokupan equivalent [Section titled “Shokupan equivalent”](#shokupan-equivalent) ```typescript declare module 'shokupan' { interface ShokupanContext { user?: { id: string; email: string }; login(user: any): Promise; logout(): void; } } ``` ## Best Practices [Section titled “Best Practices”](#best-practices) 1. **Keep augmentations in a dedicated file** (`src/types/shokupan.d.ts`) 2. **Document what each middleware adds** to the state 3. **Use optional properties** (`user?:`) when not all routes have them 4. **Combine with runtime checks** to ensure type safety matches runtime behavior 5. **Use interface merging** - you can have multiple `declare module 'shokupan'` blocks across files ## Troubleshooting [Section titled “Troubleshooting”](#troubleshooting) ### Types not recognized? [Section titled “Types not recognized?”](#types-not-recognized) Ensure your `tsconfig.json` includes the declaration file: ```json { "include": ["src/**/*"], "compilerOptions": { "moduleResolution": "bundler", "types": ["bun-types"] } } ``` ### Conflicts with generic types? [Section titled “Conflicts with generic types?”](#conflicts-with-generic-types) Module augmentation takes precedence. If you use both, the augmented types will override generics for the `state` property. ### IDE not showing types? [Section titled “IDE not showing types?”](#ide-not-showing-types) 1. Restart your TypeScript server (VS Code: `Cmd/Ctrl + Shift + P` → “Restart TS Server”) 2. Ensure the `.d.ts` file is in your `include` paths 3. Check for syntax errors in your declaration file ## Complete Example [Section titled “Complete Example”](#complete-example) **src/types/shokupan.d.ts:** ```typescript import 'shokupan'; declare module 'shokupan' { interface ShokupanContext { state: { requestId: string; userId?: string; session?: { id: string; data: Record; }; }; } } ``` **src/middleware/session.ts:** ```typescript import { Middleware } from 'shokupan'; export const sessionMiddleware: Middleware = async (ctx, next) => { ctx.state.requestId = crypto.randomUUID(); ctx.state.session = { id: 'session-' + Math.random(), data: {} }; return next(); }; ``` **src/controllers/user.controller.ts:** ```typescript import { Get, Ctx } from 'shokupan'; import { ShokupanContext } from 'shokupan'; export class UserController { @Get('/profile') async getProfile(@Ctx() ctx: ShokupanContext) { // ✅ Full type safety without generics! const sessionId = ctx.state.session?.id; return { requestId: ctx.state.requestId, sessionId }; } } ``` **src/main.ts:** ```typescript import { Shokupan } from 'shokupan'; import { sessionMiddleware } from './middleware/session'; import { UserController } from './controllers/user.controller'; const app = new Shokupan(); app.use(sessionMiddleware); app.mount('/users', UserController); app.listen(); ``` ## Conclusion [Section titled “Conclusion”](#conclusion) Module augmentation provides a clean way to achieve global type safety in Shokupan, especially for decorator-based controllers. It’s a powerful TypeScript feature that makes your codebase more maintainable while preserving the familiar Express-style patterns. For complex applications, consider the **hybrid approach** that combines global augmentation for common properties with router-specific generics for specialized state.
# JSON Parser Configuration
> Configure which JSON parser to use for parsing request bodies.
## Available Parsers [Section titled “Available Parsers”](#available-parsers) ### 1. Native (`'native'`) - Default [Section titled “1. Native ('native') - Default”](#1-native-native---default) Uses the built-in `JSON.parse` from Bun or Node.js. **Performance**: ⚡⚡⚡ Fastest (baseline)\ **Error Messages**: Standard\ **Security**: Standard\ **Recommended for**: Production use ```typescript import { Shokupan } from 'shokupan'; const app = new Shokupan({ jsonParser: 'native' // This is the default }); ``` ### 2. parse-json (`'parse-json'`) [Section titled “2. parse-json ('parse-json')”](#2-parse-json-parse-json) Uses the [`parse-json`](https://www.npmjs.com/package/parse-json) library for enhanced error messages. **Performance**: ⚡⚡⚡ \~5% slower than native (minimal overhead)\ **Error Messages**: ✨ Excellent - shows context and helpful hints\ **Security**: Standard\ **Recommended for**: Development and debugging **Installation**: ```bash bun add parse-json ``` **Usage**: ```typescript import { Shokupan } from 'shokupan'; const app = new Shokupan({ jsonParser: 'parse-json' }); app.post('/api/data', async (ctx) => { const body = await ctx.body(); return ctx.json({ received: body }); }); ``` **Benefits**: * Much better error messages when JSON is malformed * Shows the position and context of JSON syntax errors * Minimal performance impact (\~5% slower on Bun, competitive with native on Node.js) ### 3. secure-json-parse (`'secure-json-parse'`) [Section titled “3. secure-json-parse ('secure-json-parse')”](#3-secure-json-parse-secure-json-parse) Uses the [`secure-json-parse`](https://www.npmjs.com/package/secure-json-parse) library for protection against prototype pollution attacks. **Performance**: ⚡⚡ 20-30% slower than native\ **Error Messages**: Standard\ **Security**: 🔒 Protected against prototype pollution\ **Recommended for**: Parsing untrusted user input **Installation**: ```bash bun add secure-json-parse ``` **Usage**: ```typescript import { Shokupan } from 'shokupan'; const app = new Shokupan({ jsonParser: 'secure-json-parse' }); app.post('/api/webhook', async (ctx) => { // Safe from prototype pollution attacks const body = await ctx.body(); return ctx.json({ processed: true }); }); ``` **Benefits**: * Protects against prototype pollution attacks * Safely parses JSON from untrusted sources * Prevents `__proto__`, `constructor`, and `prototype` pollution **Trade-offs**: * 20-30% performance penalty compared to native * Only use when parsing untrusted input ## Performance Comparison [Section titled “Performance Comparison”](#performance-comparison) Based on benchmarks with 100,000 iterations: | Parser | Simple Objects | Nested Objects | Arrays | Large Datasets | | ------------------------- | ----------------- | ---------------- | ----------------- | ---------------- | | `native` (Bun) | **14.5M ops/sec** | **4.1M ops/sec** | **79.8K ops/sec** | **9.7K ops/sec** | | `parse-json` (Bun) | 10.4M ops/sec | 2.8M ops/sec | 51K ops/sec | 3.2K ops/sec | | `secure-json-parse` (Bun) | 8.2M ops/sec | 2.2M ops/sec | 44.5K ops/sec | 2.6K ops/sec | *Full benchmark results available in [`src/test/json-performance-results.md`](../src/test/json-performance-results.md)* ## Recommendations [Section titled “Recommendations”](#recommendations) ### Production Applications [Section titled “Production Applications”](#production-applications) ✅ Use `'native'` (default) for best performance ```typescript const app = new Shokupan({ jsonParser: 'native' // or omit this line }); ``` ### Development/Debugging [Section titled “Development/Debugging”](#developmentdebugging) ✅ Use `'parse-json'` for better error messages with minimal overhead ```typescript const app = new Shokupan({ jsonParser: process.env.NODE_ENV === 'development' ? 'parse-json' : 'native' }); ``` ### Parsing Untrusted Input [Section titled “Parsing Untrusted Input”](#parsing-untrusted-input) ✅ Use `'secure-json-parse'` for webhooks or user-generated content ```typescript // Main app uses native parser const app = new Shokupan({ jsonParser: 'native' }); // Separate router for untrusted webhooks const webhookRouter = new ShokupanRouter({ jsonParser: 'secure-json-parse' }); webhookRouter.post('/webhook', async (ctx) => { const payload = await ctx.body(); // Safely parsed return ctx.json({ ok: true }); }); app.mount('/external', webhookRouter); ``` ## Error Handling [Section titled “Error Handling”](#error-handling) ### Native Parser [Section titled “Native Parser”](#native-parser) ```typescript // Standard JSON error { "error": "Unexpected token 'i', \"invalid\" is not valid JSON" } ``` ### parse-json Parser [Section titled “parse-json Parser”](#parse-json-parser) ```typescript // Enhanced error with context { "error": "Unexpected token i in JSON at position 1 while parsing '{invalid}'\n\n > 1 | {invalid}\n | ^" } ``` ## Migration Guide [Section titled “Migration Guide”](#migration-guide) ### From Native to parse-json [Section titled “From Native to parse-json”](#from-native-to-parse-json) No code changes needed - just update config: ```diff const app = new Shokupan({ jsonParser: 'parse-json' }); ``` ### From Native to secure-json-parse [Section titled “From Native to secure-json-parse”](#from-native-to-secure-json-parse) No code changes needed - just update config: ```diff const app = new Shokupan({ jsonParser: 'secure-json-parse' }); ``` ## Notes [Section titled “Notes”](#notes) * If a parser library is not installed, Shokupan will automatically fall back to native `JSON.parse` with a warning * The parser configuration applies to all JSON body parsing in the application * Both `parse-json` and `secure-json-parse` are optional peer dependencies * Performance impact is most noticeable on high-throughput APIs processing large payloads ## See Also [Section titled “See Also”](#see-also) * [JSON Performance Benchmarks](../src/test/json-performance-results.md) * [parse-json on npm](https://www.npmjs.com/package/parse-json) * [secure-json-parse on npm](https://www.npmjs.com/package/secure-json-parse)
# Plugin Dependencies
> Shokupan uses an optional peer dependency model for plugin-specific packages. This keeps the core framework lean while allowing you to install only the features you need.
## Overview [Section titled “Overview”](#overview) Most of Shokupan’s dependencies are now **optional peer dependencies**. This means: * ✅ Smaller install size for basic apps * ✅ Install only what you use * ✅ Clear error messages when dependencies are missing * ✅ Better tree-shaking and bundle optimization ## Plugin Dependencies [Section titled “Plugin Dependencies”](#plugin-dependencies) ### Validation Plugin [Section titled “Validation Plugin”](#validation-plugin) **Packages**: `class-transformer`, `class-validator`, `reflect-metadata` ```bash bun add class-transformer class-validator reflect-metadata ``` **Usage**: ```typescript import { validate } from 'shokupan'; import { IsString, IsNumber } from 'class-validator'; class CreateUserDto { @IsString() name: string; @IsNumber() age: number; } app.post('/users', validate({ body: CreateUserDto }), async (ctx) => { const user = await ctx.body(); // Validated and transformed return ctx.json({ user }); }); ``` ### Auth Plugin [Section titled “Auth Plugin”](#auth-plugin) **Packages**: `arctic`, `jose` ```bash bun add arctic jose ``` **Usage**: ```typescript import { AuthPlugin } from 'shokupan'; const auth = new AuthPlugin({ jwtSecret: process.env.JWT_SECRET, providers: { github: { clientId: process.env.GITHUB_CLIENT_ID, clientSecret: process.env.GITHUB_CLIENT_SECRET, redirectUri: 'http://localhost:3000/auth/github/callback' } } }); app.mount('/auth', auth); ``` ### OpenAPI Validator Plugin [Section titled “OpenAPI Validator Plugin”](#openapi-validator-plugin) **Packages**: `ajv`, `ajv-formats` ```bash bun add ajv ajv-formats ``` **Usage**: ```typescript import { enableOpenApiValidation } from 'shokupan'; const app = new Shokupan({ enableOpenApiGen: true }); // Add routes... enableOpenApiValidation(app); // Validates requests against OpenAPI spec ``` ### Scalar API Documentation [Section titled “Scalar API Documentation”](#scalar-api-documentation) **Packages**: `@scalar/api-reference`, `eta` ```bash bun add @scalar/api-reference eta ``` **Usage**: ```typescript import { mountScalar } from 'shokupan'; const app = new Shokupan({ enableOpenApiGen: true }); // Add routes... mountScalar(app, '/docs', { title: 'My API Documentation' }); ``` ### Static File Serving [Section titled “Static File Serving”](#static-file-serving) **Packages**: `eta` ```bash bun add eta ``` **Usage**: ```typescript import { serveStatic } from 'shokupan'; app.mount('/static', serveStatic({ root: './public', listDirectory: true })); ``` ### JSON Parser Options [Section titled “JSON Parser Options”](#json-parser-options) **Packages**: `parse-json`, `secure-json-parse` ```bash # For better error messages bun add parse-json # For security against prototype pollution bun add secure-json-parse ``` **Usage**: ```typescript const app = new Shokupan({ jsonParser: 'parse-json' // or 'secure-json-parse' or 'native' }); ``` ## Core Dependencies [Section titled “Core Dependencies”](#core-dependencies) These are always installed and required for core functionality: | Package | Purpose | | ----------------------- | ---------------------------- | | `@scalar/openapi-types` | TypeScript types for OpenAPI | | `@opentelemetry/*` | Optional tracing support | | `@surrealdb/node` | Session storage backend | | `tslib` | TypeScript runtime helpers | ## Error Messages [Section titled “Error Messages”](#error-messages) When you try to use a plugin without its dependencies installed, you’ll get a clear error message: ```plaintext Error: class-transformer and class-validator are required for class-based validation. Install them with: bun add class-transformer class-validator reflect-metadata ``` ## Migration from v0.4.x [Section titled “Migration from v0.4.x”](#migration-from-v04x) If you’re upgrading from an earlier version where all dependencies were bundled: ### 1. Identify which plugins you use [Section titled “1. Identify which plugins you use”](#1-identify-which-plugins-you-use) Check your code for imports from: * `validation.ts` → needs class-validator packages * `auth.ts` / `AuthPlugin` → needs arctic, jose * `openapi-validator.ts` → needs ajv packages * `serveStatic` / `mountScalar` → needs eta * `@scalar/api-reference` → needs @scalar/api-reference ### 2. Install the dependencies you need [Section titled “2. Install the dependencies you need”](#2-install-the-dependencies-you-need) ```bash # Example: If you use validation and auth bun add class-transformer class-validator reflect-metadata arctic jose ``` ### 3. No code changes needed! [Section titled “3. No code changes needed!”](#3-no-code-changes-needed) Your existing code will continue to work. The only difference is you need to install the dependencies explicitly. ## Development vs Production [Section titled “Development vs Production”](#development-vs-production) ### Development Best Practices [Section titled “Development Best Practices”](#development-best-practices) Install all optional dependencies for development: ```bash bun add -d class-transformer class-validator reflect-metadata \ arctic jose ajv ajv-formats @scalar/api-reference eta \ parse-json secure-json-parse ``` ### Production Best Practices [Section titled “Production Best Practices”](#production-best-practices) Install only what you use: ```bash # Example: Auth-only API bun add arctic jose # Example: Validated REST API with docs bun add class-transformer class-validator reflect-metadata \ @scalar/api-reference eta ``` ## Bundle Size Impact [Section titled “Bundle Size Impact”](#bundle-size-impact) Approximate package sizes (minified + gzipped): | Package | Size | Purpose | | ----------------------- | ------- | ---------------------- | | `class-validator` | \~50KB | Validation decorators | | `class-transformer` | \~20KB | Object transformation | | `arctic` | \~30KB | OAuth providers | | `jose` | \~25KB | JWT operations | | `ajv` | \~45KB | JSON Schema validation | | `@scalar/api-reference` | \~200KB | API documentation UI | | `eta` | \~5KB | Template engine | **Total if using all**: \~375KB\ **Core framework only**: \~50KB By installing only what you need, you can significantly reduce your bundle size! ## Troubleshooting [Section titled “Troubleshooting”](#troubleshooting) ### ”Cannot find module” errors [Section titled “”Cannot find module” errors”](#cannot-find-module-errors) **Solution**: Install the missing package shown in the error message. ### Reflection metadata errors [Section titled “Reflection metadata errors”](#reflection-metadata-errors) If using class-validator, ensure you have: 1. Installed `reflect-metadata` 2. Imported it at the top of your entry file: ```typescript import 'reflect-metadata'; ``` ### TypeScript errors [Section titled “TypeScript errors”](#typescript-errors) Ensure you have the type definitions installed: ```bash bun add -d @types/node ``` ## See Also [Section titled “See Also”](#see-also) * [Validation Plugin Documentation](./validation.md) * [Authentication Plugin Documentation](./auth.md) * [JSON Parser Configuration](./json-parser-configuration.md)
# Production Best Practices
> Comprehensive guide for running Shokupan applications in production
This guide covers best practices, performance optimization, and recommended configurations for running Shokupan in production environments. ## Configuration [Section titled “Configuration”](#configuration) ### Basic Production Setup [Section titled “Basic Production Setup”](#basic-production-setup) ```typescript import { Shokupan, Compression, SecurityHeaders, RateLimit } from 'shokupan'; const app = new Shokupan({ port: parseInt(process.env.PORT || '3000'), development: false, enableAsyncLocalStorage: false, // Disable unless needed logger: { verbose: false, info: console.info, debug: () => {}, // Disable debug logs in production warning: console.warn, error: console.error, fatal: console.error } }); // Apply production middleware app.use(SecurityHeaders()); app.use(RateLimit({ windowMs: 60000, max: 100 })); app.use(Compression({ threshold: 1024 })); await app.listen(); ``` ## Logging [Section titled “Logging”](#logging) ### Structured Logging [Section titled “Structured Logging”](#structured-logging) Use a structured logging library for better observability: ```typescript import { Shokupan } from 'shokupan'; import pino from 'pino'; const logger = pino({ level: process.env.LOG_LEVEL || 'info', transport: { target: 'pino-pretty', options: { colorize: false, translateTime: 'SYS:standard', ignore: 'pid,hostname' } } }); const app = new Shokupan({ logger: { verbose: false, info: (msg) => logger.info(msg), debug: (msg) => logger.debug(msg), warning: (msg) => logger.warn(msg), error: (msg) => logger.error(msg), fatal: (msg) => logger.fatal(msg) } }); ``` ### Request Logging Middleware [Section titled “Request Logging Middleware”](#request-logging-middleware) ```typescript app.use(async (ctx, next) => { const start = Date.now(); const result = await next(); const duration = Date.now() - start; logger.info({ method: ctx.request.method, path: ctx.path, status: ctx.response?.status || 200, duration, ip: ctx.request.headers.get('x-forwarded-for') || 'unknown' }); return result; }); ``` ## Performance Optimization [Section titled “Performance Optimization”](#performance-optimization) ### Enable Compression [Section titled “Enable Compression”](#enable-compression) > \[!IMPORTANT] Compression can dramatically improve performance for larger payloads by reducing network I/O overhead. ```typescript import { Compression } from 'shokupan'; app.use(Compression({ threshold: 1024 // Only compress responses larger than 1KB })); ``` #### Why zstd Compression Improves Performance [Section titled “Why zstd Compression Improves Performance”](#why-zstd-compression-improves-performance) When running on Bun, zstd compression provides **significant performance benefits**: **Benchmark Results** (Shokupan on Bun): * **Without compression**: 3,389 req/s * **With zstd compression**: 4,120 req/s (\~21% improvement) **Compression Ratios**: * Small payloads (1.2 MB): **99.8% reduction** (540x compression ratio) * Large payloads (16 MB): **99.7% reduction** (387x compression ratio) **Why it’s faster**: 1. **Reduced network I/O**: Transmitting 2-40 KB instead of 1-16 MB 2. **Less memory operations**: Fewer buffer allocations and memory copies through the network stack 3. **Fast compression**: Bun’s native `zstdCompress` is extremely efficient 4. **Lower total CPU**: The CPU cost of compression is less than the saved I/O processing overhead > \[!TIP] For APIs serving JSON responses larger than 10 KB, enable compression for measurable performance gains. ### Disable Async Local Storage [Section titled “Disable Async Local Storage”](#disable-async-local-storage) Unless you specifically need AsyncLocalStorage (for request tracing, etc.), disable it: ```typescript const app = new Shokupan({ enableAsyncLocalStorage: false // ~5-10% performance improvement }); ``` ### Connection Pooling [Section titled “Connection Pooling”](#connection-pooling) For database connections, use connection pooling: ```typescript import { Pool } from 'pg'; const pool = new Pool({ max: 20, idleTimeoutMillis: 30000, connectionTimeoutMillis: 2000, }); // Use the pool in your routes app.get('/users', async (ctx) => { const { rows } = await pool.query('SELECT * FROM users'); return ctx.json(rows); }); ``` ## Security [Section titled “Security”](#security) ### Security Headers [Section titled “Security Headers”](#security-headers) ```typescript import { SecurityHeaders } from 'shokupan'; app.use(SecurityHeaders({ contentSecurityPolicy: { directives: { defaultSrc: ["'self'"], styleSrc: ["'self'", "'unsafe-inline'"], scriptSrc: ["'self'"], imgSrc: ["'self'", 'data:', 'https:'], } }, strictTransportSecurity: { maxAge: 31536000, includeSubDomains: true, preload: true } })); ``` ### CORS Configuration [Section titled “CORS Configuration”](#cors-configuration) ```typescript import { CORS } from 'shokupan'; app.use(CORS({ origin: process.env.ALLOWED_ORIGINS?.split(',') || ['https://yourdomain.com'], credentials: true, maxAge: 86400 })); ``` ### Rate Limiting [Section titled “Rate Limiting”](#rate-limiting) ```typescript import { RateLimit } from 'shokupan'; // Global rate limit app.use(RateLimit({ windowMs: 60000, // 1 minute max: 100, // 100 requests per minute standardHeaders: true, legacyHeaders: false })); // Stricter rate limit for auth endpoints app.post('/auth/login', RateLimit({ windowMs: 60000, max: 5 }), async (ctx) => { // Login logic } ); ``` ### Authentication [Section titled “Authentication”](#authentication) ```typescript import { Authentication } from 'shokupan'; app.use(Authentication({ secret: process.env.JWT_SECRET!, algorithms: ['HS256'], exclude: ['/health', '/auth/login', '/auth/register'] })); ``` ## Error Handling [Section titled “Error Handling”](#error-handling) ### Global Error Handler [Section titled “Global Error Handler”](#global-error-handler) ```typescript app.use(async (ctx, next) => { try { return await next(); } catch (error: any) { logger.error({ error: error.message, stack: error.stack, path: ctx.path, method: ctx.request.method }); // Don't expose internal errors in production if (process.env.NODE_ENV === 'production') { return ctx.json({ error: 'Internal Server Error', message: 'An unexpected error occurred' }, 500); } return ctx.json({ error: error.message, stack: error.stack }, 500); } }); ``` ### Graceful Shutdown [Section titled “Graceful Shutdown”](#graceful-shutdown) ```typescript const server = await app.listen(3000); const shutdown = async () => { logger.info('Shutting down gracefully...'); // Close database connections await pool.end(); // Stop server server.stop(); process.exit(0); }; process.on('SIGTERM', shutdown); process.on('SIGINT', shutdown); ``` ## Monitoring [Section titled “Monitoring”](#monitoring) ### Health Check Endpoint [Section titled “Health Check Endpoint”](#health-check-endpoint) ```typescript app.get('/health', (ctx) => { return ctx.json({ status: 'ok', timestamp: new Date().toISOString(), uptime: process.uptime() }); }); app.get('/health/ready', async (ctx) => { try { // Check database connection await pool.query('SELECT 1'); return ctx.json({ status: 'ready' }); } catch (error) { return ctx.json({ status: 'not ready' }, 503); } }); ``` ### Metrics [Section titled “Metrics”](#metrics) ```typescript let requestCount = 0; let errorCount = 0; app.use(async (ctx, next) => { requestCount++; try { return await next(); } catch (error) { errorCount++; throw error; } }); app.get('/metrics', (ctx) => { return ctx.json({ requests: requestCount, errors: errorCount, errorRate: requestCount > 0 ? errorCount / requestCount : 0, uptime: process.uptime(), memory: process.memoryUsage() }); }); ``` ## Environment Variables [Section titled “Environment Variables”](#environment-variables) ### Required Variables [Section titled “Required Variables”](#required-variables) ```bash # Server PORT=3000 NODE_ENV=production # Security JWT_SECRET=your-super-secret-jwt-key-change-this ALLOWED_ORIGINS=https://yourdomain.com,https://www.yourdomain.com # Database DATABASE_URL=postgresql://user:pass@host:5432/dbname # Logging LOG_LEVEL=info ``` ### Loading Environment Variables [Section titled “Loading Environment Variables”](#loading-environment-variables) ```typescript // Bun automatically loads .env files // For Node.js, use dotenv: import 'dotenv/config'; // Validate required variables const requiredEnvVars = ['JWT_SECRET', 'DATABASE_URL']; for (const envVar of requiredEnvVars) { if (!process.env[envVar]) { throw new Error(`Missing required environment variable: ${envVar}`); } } ``` ## Deployment Platforms [Section titled “Deployment Platforms”](#deployment-platforms) ### Docker [Section titled “Docker”](#docker) See the [Deployment Guide](/guides/deployment/) for Docker configuration. ### Bun with systemd [Section titled “Bun with systemd”](#bun-with-systemd) Create `/etc/systemd/system/myapp.service`: ```ini [Unit] Description=My Shokupan Application After=network.target [Service] Type=simple User=appuser WorkingDirectory=/opt/myapp Environment="NODE_ENV=production" EnvironmentFile=/opt/myapp/.env ExecStart=/usr/local/bin/bun run src/index.ts Restart=always RestartSec=10 [Install] WantedBy=multi-user.target ``` Enable and start: ```bash sudo systemctl enable myapp sudo systemctl start myapp sudo systemctl status myapp ``` ## Production Checklist [Section titled “Production Checklist”](#production-checklist) * [ ] **Logging**: Configure structured logging with appropriate log levels * [ ] **Compression**: Enable compression middleware for responses > 1KB * [ ] **Security Headers**: Apply security headers plugin * [ ] **CORS**: Configure CORS with specific allowed origins * [ ] **Rate Limiting**: Implement rate limiting on all endpoints * [ ] **Authentication**: Secure private endpoints with JWT or sessions * [ ] **Error Handling**: Implement global error handler * [ ] **Graceful Shutdown**: Handle SIGTERM/SIGINT signals * [ ] **Health Checks**: Add `/health` and `/health/ready` endpoints * [ ] **Environment Variables**: Use env vars for all secrets and config * [ ] **HTTPS**: Enable HTTPS (via reverse proxy like nginx/Caddy) * [ ] **Database**: Use connection pooling * [ ] **Monitoring**: Set up metrics and alerting * [ ] **AsyncLocalStorage**: Disable if not needed for performance * [ ] **Debug Logs**: Disable debug logging in production ## Reverse Proxy (nginx) [Section titled “Reverse Proxy (nginx)”](#reverse-proxy-nginx) Run Shokupan behind nginx for HTTPS and load balancing: ```nginx upstream shokupan { server localhost:3000; server localhost:3001; server localhost:3002; } server { listen 80; server_name yourdomain.com; return 301 https://$server_name$request_uri; } server { listen 443 ssl http2; server_name yourdomain.com; ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem; location / { proxy_pass http://shokupan; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_cache_bypass $http_upgrade; } } ``` ## Performance Tips [Section titled “Performance Tips”](#performance-tips) 1. **Use Bun Runtime**: Bun provides the best performance for Shokupan 2. **Enable zstd Compression**: 20%+ performance improvement for JSON APIs 3. **Minimize Middleware**: Only use middleware you actually need 4. **Connection Pooling**: Pool database connections (max 20-50 connections) 5. **Caching**: Use Redis or in-memory caching for frequently accessed data 6. **Static Assets**: Serve static files through CDN or nginx 7. **Database Indexes**: Ensure proper database indexing 8. **Monitor Memory**: Watch for memory leaks with process.memoryUsage()
# Testing
> Test your Shokupan applications with popular JavaScript test runners
Shokupan provides powerful testing utilities that work seamlessly with popular JavaScript test runners. This guide covers testing with Bun Test, Jest, Vitest, and Mocha. ## Table of Contents [Section titled “Table of Contents”](#table-of-contents) * [Testing Methods](#testing-methods) * [testRequest()](#testrequest) * [internalRequest()](#internalrequest) * [Bun Test](#bun-test) * [Basic Tests](#basic-tests) * [Testing Middleware](#testing-middleware) * [Testing Controllers](#testing-controllers) * [Testing Internal Requests](#testing-internal-requests) * [Jest](#jest) * [Vitest](#vitest) * [Mocha](#mocha) * [Testing Routers Directly](#testing-routers-directly) * [Testing with Plugins](#testing-with-plugins) * [Best Practices](#best-practices) * [Coverage](#coverage) ## Testing Methods [Section titled “Testing Methods”](#testing-methods) Shokupan provides two primary methods for testing your applications: ### `testRequest()` [Section titled “testRequest()”](#testrequest) A testing utility that processes requests and returns a simplified result object. This method: * Goes through the **full application stack** (middleware, hooks, error handling) * Returns `{ status, headers, data }` for easy assertions * Automatically parses JSON responses * Perfect for integration tests ```typescript const result = await app.testRequest({ method: 'GET', path: '/users', headers: { 'Authorization': 'Bearer token' }, body: { name: 'Alice' }, query: { page: '1' } }); // result = { status: 200, headers: {...}, data: {...} } ``` ### `internalRequest()` [Section titled “internalRequest()”](#internalrequest) Makes an internal request through the full routing pipeline. This method: * Returns a raw `Response` object * Supports streaming responses * Useful for testing route proxying and internal requests * Ideal for testing Response headers and status codes directly ```typescript const response = await app.internalRequest({ path: '/api/users', method: 'POST', body: { name: 'Bob' } }); // response is a standard Response object const data = await response.json(); ``` ## Bun Test [Section titled “Bun Test”](#bun-test) Shokupan works perfectly with [Bun’s built-in test runner](https://bun.sh/docs/cli/test), which is blazingly fast and requires no configuration. ### Setup [Section titled “Setup”](#setup) ```bash # No installation needed - Bun includes the test runner bun test ``` ### Basic Tests [Section titled “Basic Tests”](#basic-tests) ```typescript import { describe, it, expect } from 'bun:test'; import { Shokupan } from 'shokupan'; describe('API Tests', () => { it('should return hello world', async () => { const app = new Shokupan(); app.get('/', () => ({ message: 'Hello World' })); const res = await app.testRequest({ method: 'GET', path: '/' }); expect(res.status).toBe(200); expect(res.data).toEqual({ message: 'Hello World' }); }); it('should handle POST requests', async () => { const app = new Shokupan(); app.post('/users', async (ctx) => { const body = await ctx.body(); return { created: body }; }); const res = await app.testRequest({ method: 'POST', path: '/users', body: { name: 'Alice', email: 'alice@example.com' } }); expect(res.status).toBe(200); expect(res.data.created).toEqual({ name: 'Alice', email: 'alice@example.com' }); }); }); ``` ### Testing Middleware [Section titled “Testing Middleware”](#testing-middleware) ```typescript import { describe, it, expect, beforeEach } from 'bun:test'; import { Shokupan } from 'shokupan'; describe('Middleware Tests', () => { let app: Shokupan; beforeEach(() => { app = new Shokupan(); }); it('should execute middleware in order', async () => { const calls: string[] = []; app.use(async (ctx, next) => { calls.push('middleware1'); return next?.(); }); app.use(async (ctx, next) => { calls.push('middleware2'); return next?.(); }); app.get('/', () => { calls.push('handler'); return 'ok'; }); await app.testRequest({ path: '/' }); expect(calls).toEqual(['middleware1', 'middleware2', 'handler']); }); it('should handle authentication middleware', async () => { app.use(async (ctx, next) => { const token = ctx.req.headers.get('Authorization'); if (!token) { return ctx.json({ error: 'Unauthorized' }, 401); } return next?.(); }); app.get('/protected', () => ({ data: 'secret' })); // Test without auth const unauthorized = await app.testRequest({ path: '/protected' }); expect(unauthorized.status).toBe(401); // Test with auth const authorized = await app.testRequest({ path: '/protected', headers: { 'Authorization': 'Bearer token123' } }); expect(authorized.status).toBe(200); expect(authorized.data).toEqual({ data: 'secret' }); }); }); ``` ### Testing Controllers [Section titled “Testing Controllers”](#testing-controllers) ```typescript import { describe, it, expect } from 'bun:test'; import { Shokupan } from 'shokupan'; import { Get, Post, Param, Body } from 'shokupan'; class UserController { @Get('/') getUsers() { return [ { id: 1, name: 'Alice' }, { id: 2, name: 'Bob' } ]; } @Get('/:id') getUser(@Param('id') id: string) { return { id, name: 'Test User' }; } @Post('/') createUser(@Body() body: any) { return { id: 3, ...body }; } } describe('UserController', () => { it('should get all users', async () => { const app = new Shokupan(); app.mount('/users', UserController); const res = await app.testRequest({ method: 'GET', path: '/users' }); expect(res.status).toBe(200); expect(res.data).toHaveLength(2); }); it('should get user by id', async () => { const app = new Shokupan(); app.mount('/users', UserController); const res = await app.testRequest({ method: 'GET', path: '/users/123' }); expect(res.data).toEqual({ id: '123', name: 'Test User' }); }); }); ``` ### Testing Internal Requests [Section titled “Testing Internal Requests”](#testing-internal-requests) ```typescript import { describe, it, expect } from 'bun:test'; import { Shokupan, ShokupanRouter } from 'shokupan'; describe('Internal Request Tests', () => { it('should make internal requests between routes', async () => { const app = new Shokupan(); const router = new ShokupanRouter(); // Target route router.get('/wines/red', () => ({ type: 'red', varieties: ['Merlot', 'Cabernet'] })); router.get('/wines/white', () => ({ type: 'white', varieties: ['Chardonnay', 'Riesling'] })); // Proxy route that calls other routes internally router.get('/wines/all', async (ctx) => { const [red, white] = await Promise.all([ router.internalRequest('/api/wines/red'), router.internalRequest('/api/wines/white') ]); return { red: await red.json(), white: await white.json() }; }); app.mount('/api', router); const res = await app.testRequest({ path: '/api/wines/all' }); expect(res.status).toBe(200); expect(res.data.red.type).toBe('red'); expect(res.data.white.type).toBe('white'); }); }); ``` ## Jest [Section titled “Jest”](#jest) [Jest](https://jestjs.io/) is a popular testing framework with great TypeScript support. ### Setup [Section titled “Setup”](#setup-1) ```bash npm install --save-dev jest @types/jest ts-jest ``` **jest.config.js:** ```javascript module.exports = { preset: 'ts-jest', testEnvironment: 'node', testMatch: ['**/__tests__/**/*.test.ts'], collectCoverageFrom: ['src/**/*.ts'] }; ``` ### Example Tests [Section titled “Example Tests”](#example-tests) ```typescript import { Shokupan } from 'shokupan'; describe('Shokupan with Jest', () => { let app: Shokupan; beforeEach(() => { app = new Shokupan(); }); afterEach(() => { // Cleanup if needed }); describe('GET /health', () => { it('should return 200 OK', async () => { app.get('/health', () => ({ status: 'ok' })); const response = await app.testRequest({ method: 'GET', path: '/health' }); expect(response.status).toBe(200); expect(response.data).toMatchObject({ status: 'ok' }); }); }); describe('Error Handling', () => { it('should return 404 for unknown routes', async () => { const response = await app.testRequest({ path: '/unknown-route' }); expect(response.status).toBe(404); }); it('should handle errors gracefully', async () => { app.get('/error', () => { throw new Error('Test error'); }); const response = await app.testRequest({ path: '/error' }); expect(response.status).toBe(500); expect(response.data).toHaveProperty('error'); }); }); }); ``` ### Snapshot Testing [Section titled “Snapshot Testing”](#snapshot-testing) ```typescript describe('API Response Snapshots', () => { it('should match snapshot', async () => { const app = new Shokupan(); app.get('/api/data', () => ({ version: '1.0.0', items: [1, 2, 3] })); const response = await app.testRequest({ path: '/api/data' }); expect(response.data).toMatchSnapshot(); }); }); ``` ## Vitest [Section titled “Vitest”](#vitest) [Vitest](https://vitest.dev/) is a blazing-fast test runner compatible with Jest’s API. ### Setup [Section titled “Setup”](#setup-2) ```bash npm install --save-dev vitest ``` **vitest.config.ts:** ```typescript import { defineConfig } from 'vitest/config'; export default defineConfig({ test: { globals: true, environment: 'node', coverage: { provider: 'v8', reporter: ['text', 'json', 'html'] } } }); ``` ### Example Tests [Section titled “Example Tests”](#example-tests-1) ```typescript import { describe, it, expect, beforeEach } from 'vitest'; import { Shokupan } from 'shokupan'; describe('Shokupan with Vitest', () => { let app: Shokupan; beforeEach(() => { app = new Shokupan(); }); it('should handle query parameters', async () => { app.get('/search', (ctx) => { const query = ctx.req.query.get('q'); return { results: [`Result for: ${query}`] }; }); const response = await app.testRequest({ path: '/search', query: { q: 'test' } }); expect(response.status).toBe(200); expect(response.data.results).toContain('Result for: test'); }); it('should handle path parameters', async () => { app.get('/users/:id/posts/:postId', (ctx) => ({ userId: ctx.params.id, postId: ctx.params.postId })); const response = await app.testRequest({ path: '/users/42/posts/123' }); expect(response.data).toEqual({ userId: '42', postId: '123' }); }); }); ``` ## Mocha [Section titled “Mocha”](#mocha) [Mocha](https://mochajs.org/) is a flexible testing framework often paired with Chai for assertions. ### Setup [Section titled “Setup”](#setup-3) ```bash npm install --save-dev mocha @types/mocha chai @types/chai ts-node ``` **test/mocha.opts:** ```plaintext --require ts-node/register --require source-map-support/register --recursive --extension ts ``` ### Example Tests [Section titled “Example Tests”](#example-tests-2) ```typescript import { expect } from 'chai'; import { Shokupan } from 'shokupan'; describe('Shokupan with Mocha', () => { let app: Shokupan; beforeEach(() => { app = new Shokupan(); }); describe('JSON Handling', () => { it('should parse and return JSON', async () => { app.post('/api/echo', async (ctx) => { const body = await ctx.body(); return { echo: body }; }); const response = await app.testRequest({ method: 'POST', path: '/api/echo', headers: { 'Content-Type': 'application/json' }, body: { message: 'hello' } }); expect(response.status).to.equal(200); expect(response.data).to.deep.equal({ echo: { message: 'hello' } }); }); }); describe('Headers', () => { it('should set custom headers', async () => { app.get('/custom-headers', (ctx) => { return ctx.text('OK', 200, { 'X-Custom-Header': 'CustomValue' }); }); const response = await app.testRequest({ path: '/custom-headers' }); expect(response.headers['x-custom-header']).to.equal('CustomValue'); }); }); }); ``` ## Testing Routers Directly [Section titled “Testing Routers Directly”](#testing-routers-directly) You can test `ShokupanRouter` instances independently from the application. This is useful for testing modular router logic, API route groups, or reusable router components. ### Key Differences [Section titled “Key Differences”](#key-differences) When testing routers directly: * **Router.testRequest()** bypasses application-level middleware * Only router-specific middleware (via `router.use()`) is executed * No application hooks are triggered * Useful for unit testing router logic in isolation ### Basic Router Testing [Section titled “Basic Router Testing”](#basic-router-testing) ```typescript import { describe, it, expect } from 'bun:test'; import { ShokupanRouter } from 'shokupan'; describe('API Router', () => { it('should test router independently', async () => { const router = new ShokupanRouter(); router.get('/items', () => ({ items: [] })); router.get('/items/:id', (ctx) => ({ id: ctx.params.id, name: 'Item' })); router.post('/items', async (ctx) => { const body = await ctx.body(); return { created: body }; }); // Test GET /items const listRes = await router.testRequest({ method: 'GET', path: '/items' }); expect(listRes.status).toBe(200); expect(listRes.data).toEqual({ items: [] }); // Test GET /items/:id const getRes = await router.testRequest({ path: '/items/123' }); expect(getRes.data.id).toBe('123'); // Test POST /items const createRes = await router.testRequest({ method: 'POST', path: '/items', body: { name: 'New Item' } }); expect(createRes.data.created).toEqual({ name: 'New Item' }); }); }); ``` ### Testing Router Middleware [Section titled “Testing Router Middleware”](#testing-router-middleware) Test middleware that applies only to specific routers: ```typescript import { describe, it, expect, beforeEach } from 'bun:test'; import { ShokupanRouter } from 'shokupan'; describe('Router Middleware', () => { let router: ShokupanRouter; beforeEach(() => { router = new ShokupanRouter(); }); it('should apply router-level middleware', async () => { const calls: string[] = []; // Router-level middleware router.use(async (ctx, next) => { calls.push('router-middleware'); return next?.(); }); router.get('/test', () => { calls.push('handler'); return { success: true }; }); await router.testRequest({ path: '/test' }); expect(calls).toEqual(['router-middleware', 'handler']); }); it('should handle router-level guards', async () => { // Add authentication guard to router router.guard({ description: 'Auth Guard' }, async (ctx, next) => { const apiKey = ctx.req.headers.get('X-API-Key'); if (apiKey !== 'secret') { return ctx.json({ error: 'Unauthorized' }, 401); } return next?.(); }); router.get('/protected', () => ({ data: 'sensitive' })); // Test without API key const unauthorized = await router.testRequest({ path: '/protected' }); expect(unauthorized.status).toBe(401); // Test with API key const authorized = await router.testRequest({ path: '/protected', headers: { 'X-API-Key': 'secret' } }); expect(authorized.status).toBe(200); expect(authorized.data).toEqual({ data: 'sensitive' }); }); }); ``` ### Testing Nested Routers [Section titled “Testing Nested Routers”](#testing-nested-routers) ```typescript import { describe, it, expect } from 'bun:test'; import { ShokupanRouter } from 'shokupan'; describe('Nested Routers', () => { it('should test nested router structure', async () => { const apiRouter = new ShokupanRouter(); const usersRouter = new ShokupanRouter(); const postsRouter = new ShokupanRouter(); // Users router usersRouter.get('/', () => ({ users: [] })); usersRouter.get('/:id', (ctx) => ({ id: ctx.params.id, name: 'User' })); // Posts router postsRouter.get('/', () => ({ posts: [] })); postsRouter.post('/', async (ctx) => { const body = await ctx.body(); return { created: body }; }); // Mount routers apiRouter.mount('/users', usersRouter); apiRouter.mount('/posts', postsRouter); // Test users routes (note: paths include /users prefix) const usersRes = await apiRouter.testRequest({ path: '/users' }); expect(usersRes.data).toEqual({ users: [] }); const userRes = await apiRouter.testRequest({ path: '/users/42' }); expect(userRes.data.id).toBe('42'); // Test posts routes const postsRes = await apiRouter.testRequest({ path: '/posts' }); expect(postsRes.data).toEqual({ posts: [] }); }); }); ``` ### Testing Router with Controllers [Section titled “Testing Router with Controllers”](#testing-router-with-controllers) ```typescript import { describe, it, expect } from 'bun:test'; import { ShokupanRouter } from 'shokupan'; import { Get, Post, Param } from 'shokupan'; class ProductController { @Get('/') list() { return { products: ['Product 1', 'Product 2'] }; } @Get('/:id') get(@Param('id') id: string) { return { id, name: `Product ${id}` }; } } describe('Router with Controllers', () => { it('should test router with mounted controller', async () => { const router = new ShokupanRouter(); router.mount('/products', ProductController); const listRes = await router.testRequest({ path: '/products' }); expect(listRes.data.products).toHaveLength(2); const getRes = await router.testRequest({ path: '/products/123' }); expect(getRes.data.id).toBe('123'); }); }); ``` ### Testing Router Internal Requests [Section titled “Testing Router Internal Requests”](#testing-router-internal-requests) Test routers that make internal requests to other routes: ```typescript import { describe, it, expect } from 'bun:test'; import { ShokupanRouter } from 'shokupan'; describe('Router Internal Requests', () => { it('should handle internal route calls', async () => { const router = new ShokupanRouter(); // Data routes router.get('/data/cats', () => ({ category: 'cats', items: ['Tabby', 'Siamese'] })); router.get('/data/dogs', () => ({ category: 'dogs', items: ['Labrador', 'Poodle'] })); // Aggregator route router.get('/data/all', async () => { const [catsRes, dogsRes] = await Promise.all([ router.internalRequest('/data/cats'), router.internalRequest('/data/dogs') ]); return { cats: await catsRes.json(), dogs: await dogsRes.json() }; }); const res = await router.testRequest({ path: '/data/all' }); expect(res.status).toBe(200); expect(res.data.cats.category).toBe('cats'); expect(res.data.dogs.category).toBe('dogs'); }); }); ``` ### Testing vs Mounting in App [Section titled “Testing vs Mounting in App”](#testing-vs-mounting-in-app) When deciding between testing a router directly or mounting it in an app: **Test Router Directly:** ```typescript // Unit test: isolated router logic only const router = new ShokupanRouter(); router.get('/items', () => ({ items: [] })); const res = await router.testRequest({ path: '/items' }); // No app middleware, no hooks, fast execution ``` **Test Via App:** ```typescript // Integration test: full application stack const app = new Shokupan(); app.use(SomeMiddleware()); // This runs app.mount('/api', router); const res = await app.testRequest({ path: '/api/items' }); // Includes middleware, hooks, full app behavior ``` ## Testing with Plugins [Section titled “Testing with Plugins”](#testing-with-plugins) ```typescript import { describe, it, expect } from 'bun:test'; import { Shokupan } from 'shokupan'; import { Compression } from 'shokupan/plugins'; describe('Plugin Tests', () => { it('should compress responses', async () => { const app = new Shokupan(); app.use(Compression()); app.get('/data', () => { return 'x'.repeat(1000); // Large response }); const response = await app.testRequest({ path: '/data', headers: { 'Accept-Encoding': 'gzip' } }); expect(response.status).toBe(200); // Response should be compressed if size threshold is met }); }); ``` ## Best Practices [Section titled “Best Practices”](#best-practices) ### 1. **Isolate Tests** [Section titled “1. Isolate Tests”](#1-isolate-tests) Create a new app instance for each test to avoid state pollution: ```typescript beforeEach(() => { app = new Shokupan(); }); ``` ### 2. **Test Error Cases** [Section titled “2. Test Error Cases”](#2-test-error-cases) Always test both success and error scenarios: ```typescript it('should validate input', async () => { app.post('/users', async (ctx) => { const body = await ctx.body(); if (!body.email) { return ctx.json({ error: 'Email required' }, 400); } return { success: true }; }); // Test error case const errorRes = await app.testRequest({ method: 'POST', path: '/users', body: { name: 'Alice' } }); expect(errorRes.status).toBe(400); // Test success case const successRes = await app.testRequest({ method: 'POST', path: '/users', body: { email: 'alice@example.com' } }); expect(successRes.status).toBe(200); }); ``` ### 3. **Use Type Safety** [Section titled “3. Use Type Safety”](#3-use-type-safety) Leverage TypeScript for type-safe tests: ```typescript interface User { id: number; name: string; } it('should return typed data', async () => { app.get('/users/:id', (ctx) => ({ id: parseInt(ctx.params.id), name: 'Alice' })); const response = await app.testRequest({ path: '/users/1' }); const user = response.data as User; expect(user.id).toBe(1); expect(user.name).toBe('Alice'); }); ``` ### 4. **Test Async Operations** [Section titled “4. Test Async Operations”](#4-test-async-operations) Use `async/await` for testing asynchronous routes: ```typescript it('should handle async operations', async () => { app.get('/async', async () => { await new Promise(resolve => setTimeout(resolve, 100)); return { done: true }; }); const response = await app.testRequest({ path: '/async' }); expect(response.data.done).toBe(true); }); ``` ## Coverage [Section titled “Coverage”](#coverage) ### Bun Test Coverage [Section titled “Bun Test Coverage”](#bun-test-coverage) ```bash bun test --coverage ``` ### Jest Coverage [Section titled “Jest Coverage”](#jest-coverage) ```bash npm test -- --coverage ``` ### Vitest Coverage [Section titled “Vitest Coverage”](#vitest-coverage) ```bash npx vitest --coverage ``` ## Next Steps [Section titled “Next Steps”](#next-steps) * [Deployment](/guides/deployment/) - Deploy your app * [Production Setup](/guides/production/) - Production best practices * [CLI Tools](/guides/cli/) - Code generation
# Express Middleware
> Use Express middleware with Shokupan
Many Express middleware packages work with Shokupan using the compatibility layer. ## useExpress Adapter [Section titled “useExpress Adapter”](#useexpress-adapter) ```typescript import { useExpress } from 'shokupan'; import helmet from 'helmet'; app.use(useExpress(helmet())); ``` ## Native Alternatives [Section titled “Native Alternatives”](#native-alternatives) For better performance, use native Shokupan plugins: ```typescript import { SecurityHeaders, Compression, Cors } from 'shokupan'; app.use(SecurityHeaders()); app.use(Compression()); app.use(Cors()); ``` ## Next Steps [Section titled “Next Steps”](#next-steps) * [Plugins](/plugins/cors/) - Native Shokupan plugins
# Migrating from Express
> Guide to migrating from Express.js to Shokupan
Shokupan is designed to feel familiar to Express developers. This guide shows you how to migrate your Express app. ## Key Differences [Section titled “Key Differences”](#key-differences) 1. **Context vs Req/Res**: Single `ctx` object instead of separate `req` and `res` 2. **Return vs Send**: Return values directly instead of calling `res.json()` 3. **Built-in Parsing**: Body parsing is automatic 4. **Async by Default**: All handlers are naturally async 5. **Web Standards**: Uses `Headers`, `URL`, `Response` from web standards ## Basic Server [Section titled “Basic Server”](#basic-server) **Express:** ```typescript import express from 'express'; const app = express(); app.get('/', (req, res) => { res.json({ message: 'Hello' }); }); app.listen(3000); ``` **Shokupan:** ```typescript import { Shokupan } from 'shokupan'; const app = new Shokupan({ port: 3000 }); app.get('/', (ctx) => { return { message: 'Hello' }; }); app.listen(); ``` ## Middleware [Section titled “Middleware”](#middleware) **Express:** ```typescript app.use((req, res, next) => { console.log(req.method, req.path); next(); }); ``` **Shokupan:** ```typescript app.use(async (ctx, next) => { console.log(ctx.method, ctx.path); return next(); // Must return! }); ``` ## Migration Checklist [Section titled “Migration Checklist”](#migration-checklist) * [ ] Replace `req` and `res` with `ctx` * [ ] Change `res.json()` to `return` * [ ] Remove `express.json()` middleware * [ ] Return values from middleware * [ ] Update header access: `req.headers.key` → `ctx.headers.get('key')` * [ ] Update query params: `req.query.key` → `ctx.query.get('key')` ## Next Steps [Section titled “Next Steps”](#next-steps) * [Routing](/core/routing/) - Learn Shokupan patterns * [Controllers](/core/controllers/) - Use decorators
# Migrating from Koa
> Guide to migrating from Koa to Shokupan
Shokupan’s context-based approach is inspired by Koa. Migration is straightforward. ## Key Differences [Section titled “Key Differences”](#key-differences) 1. **Return Value**: Shokupan requires returning the response from middleware 2. **Routing**: Built-in routing, no need for external router 3. **Body Parsing**: Built-in, no need for koa-bodyparser ## Middleware [Section titled “Middleware”](#middleware) **Koa:** ```typescript app.use(async (ctx, next) => { await next(); }); ``` **Shokupan:** ```typescript app.use(async (ctx, next) => { const result = await next(); return result; // Must return! }); ``` ## Next Steps [Section titled “Next Steps”](#next-steps) * [Core Concepts](/core/routing/) - Learn Shokupan patterns
# Migrating from NestJS
> Guide to migrating from NestJS to Shokupan
Shokupan supports NestJS-style decorators with a lighter-weight approach. ## Controllers [Section titled “Controllers”](#controllers) **NestJS:** ```typescript @Controller('users') export class UserController { @Get(':id') getUser(@Param('id') id: string) { return { id }; } } ``` **Shokupan:** ```typescript export class UserController { @Get('/:id') getUser(@Param('id') id: string) { return { id }; } } app.mount('/users', UserController); ``` ## Next Steps [Section titled “Next Steps”](#next-steps) * [Controllers](/core/controllers/) - Full controller documentation
# Benchmarks
> Performance benchmarks comparing Shokupan to other frameworks
Shokupan is built with performance as a top priority. This page contains comprehensive benchmark results comparing Shokupan against other popular Node.js web frameworks across both **Bun** and **Node.js** runtimes. ## Overview [Section titled “Overview”](#overview) Our benchmark suite tests frameworks under both basic and advanced scenarios to provide a realistic comparison of performance characteristics. All benchmarks use [autocannon](https://github.com/mcollina/autocannon) for load testing with **100 concurrent connections**. ## Frameworks Tested [Section titled “Frameworks Tested”](#frameworks-tested) * **Shokupan** - The framework being benchmarked * **Fastify** - High-performance web framework * **Express** - De-facto standard Node.js framework * **Koa** - Modern, lightweight framework by Express creators * **Hapi** - Enterprise-grade framework * **NestJS** - TypeScript-first progressive framework * **Hono** - Ultrafast web framework (advanced benchmarks) * **Elysia** - End-to-end type-safe framework for Bun (advanced benchmarks) ## Basic Benchmark Suite [Section titled “Basic Benchmark Suite”](#basic-benchmark-suite) The basic benchmark suite tests fundamental request handling capabilities across three standardized endpoints: ### Test Endpoints [Section titled “Test Endpoints”](#test-endpoints) 1. **`/static`** - Returns plain text “Hello World” * Tests raw throughput with minimal overhead * Pure routing and response generation performance 2. **`/json`** - Returns a medium-sized JSON object (\~500 bytes) * Tests JSON serialization performance * Measures overhead of content-type headers 3. **`/dynamic/:id`** - Returns dynamic content with path parameter interpolation * Tests routing with path parameters * Measures parameter extraction overhead ### Metrics Collected [Section titled “Metrics Collected”](#metrics-collected) * **Requests/sec** (average) - Higher is better * **Latency** (average, in milliseconds) - Lower is better * **Throughput** (average, in MB/s) - Higher is better ### Interactive Results [Section titled “Interactive Results”](#interactive-results) ## Advanced Benchmark Suite [Section titled “Advanced Benchmark Suite”](#advanced-benchmark-suite) The advanced benchmark suite tests frameworks under more realistic and challenging scenarios that go beyond basic request handling. ### Advanced Scenarios [Section titled “Advanced Scenarios”](#advanced-scenarios) #### 1. **Compression Performance** [Section titled “1. Compression Performance”](#1-compression-performance) Tests compression across multiple algorithms: * **gzip** - Standard compression * **brotli** - Modern high-compression algorithm * **deflate** - Legacy compression * **zstd** - Facebook’s high-performance compression * **store** - No compression baseline Measures throughput and latency with compressed responses. Note that not all frameworks support all compression algorithms. #### 2. **Large Payloads** [Section titled “2. Large Payloads”](#2-large-payloads) Stress tests handling of large data: * **Request**: POST with 10MB body * **Response**: 5MB JSON response * **Headers**: 100+ headers stress test Tests memory efficiency and streaming capabilities. #### 3. **Math Middleware Chain** [Section titled “3. Math Middleware Chain”](#3-math-middleware-chain) Tests middleware overhead with CPU-bound operations: * Chain of 10 middleware functions * Each performs MD5 hashing on request data * Measures framework efficiency in chaining middleware * Identifies middleware processing overhead #### 4. **Route Scaling (1000 Handlers)** [Section titled “4. Route Scaling (1000 Handlers)”](#4-route-scaling-1000-handlers) Tests routing performance at scale: * Registers 1000 unique routes * Measures route lookup performance * Identifies O(n) vs O(1) route lookup implementations * Tests framework scalability #### 5. **Property Access** [Section titled “5. Property Access”](#5-property-access) Tests context property access patterns: * Multiple property reads per request * Measures getter overhead * Tests framework internals efficiency #### 6. **Fully-Loaded Performance** [Section titled “6. Fully-Loaded Performance”](#6-fully-loaded-performance) Measures overhead of production-ready configurations: * OpenTelemetry tracing enabled * Request validation active * AsyncLocalStorage for request context * Compares baseline vs fully-instrumented performance * Simulates real-world production setups #### 7. **Long-Pending Parallelization** [Section titled “7. Long-Pending Parallelization”](#7-long-pending-parallelization) Tests concurrent connection handling: * 10000+ concurrent requests with delays * Tests connection handling capacity * Measures timeout behavior * Identifies framework parallelization capabilities ### Framework Limitations [Section titled “Framework Limitations”](#framework-limitations) Not all frameworks support all scenarios. Common limitations include: * **Compression**: Some frameworks lack native brotli/zstd support * **Math Middleware**: NestJS has limited dynamic middleware support * **Long-Pending**: Some frameworks may not handle 10000+ connections efficiently Failed scenarios are marked as “FAILED” in the report with error details. ### Interactive Results [Section titled “Interactive Results”](#interactive-results-1) ## Running Benchmarks Yourself [Section titled “Running Benchmarks Yourself”](#running-benchmarks-yourself) ### Basic Benchmarks [Section titled “Basic Benchmarks”](#basic-benchmarks) ```bash cd src/benchmarking bun install bun run test ``` Filter by framework: ```bash bun runner.ts --filter shokupan ``` ### Advanced Benchmarks [Section titled “Advanced Benchmarks”](#advanced-benchmarks) ```bash cd src/benchmarking bun run bench:advanced ``` Filter by framework: ```bash bun advanced-runner.ts --filter shokupan ``` Filter by scenario: ```bash bun advanced-runner.ts --scenario compression-gzip ``` Combine filters: ```bash bun advanced-runner.ts --filter fastify --scenario large-payload-response ``` ### Reports and History [Section titled “Reports and History”](#reports-and-history) Both benchmark suites automatically generate interactive HTML reports that: * Sort frameworks by performance (Requests/Sec) * Track the last 10 benchmark runs for historical comparison * Automatically open in your default browser after completion * Persist results in JSON format for programmatic access ## Performance Tips [Section titled “Performance Tips”](#performance-tips) For optimal Shokupan performance in production: 1. **Enable Compression** - Use `Compression()` plugin with zstd for large payloads 2. **Disable Logging** - Set `NODE_ENV=production` to disable development logs 3. **Use Bun Runtime** - Shokupan is optimized for Bun’s performance characteristics 4. **Minimize Middleware** - Each middleware adds overhead; use only what you need 5. **Enable Caching** - Cache responses where appropriate using `ShokupanContext.set()` headers See our [Production Best Practices](/guides/production/) guide for more detailed recommendations. ## Contributing Benchmarks [Section titled “Contributing Benchmarks”](#contributing-benchmarks) To add new frameworks or scenarios to the benchmark suite, see the [benchmark README](https://github.com/knackstedt/shokupan/tree/HEAD/src/benchmarking) for detailed instructions.
# Authentication
> OAuth2 authentication with multiple providers
Shokupan provides built-in OAuth2 authentication with support for GitHub, Google, Microsoft, Apple, Auth0, Okta, and custom providers. ## Quick Start [Section titled “Quick Start”](#quick-start) ```bash bun add shokupan ``` ```typescript import { Shokupan, AuthPlugin } from 'shokupan'; const app = new Shokupan(); const auth = new AuthPlugin({ jwtSecret: process.env.JWT_SECRET!, jwtExpiration: '7d', cookieOptions: { httpOnly: true, secure: true, sameSite: 'lax' }, github: { clientId: process.env.GITHUB_CLIENT_ID!, clientSecret: process.env.GITHUB_CLIENT_SECRET!, redirectUri: 'http://localhost:3000/auth/github/callback' } }); // Mount auth routes at /auth app.mount('/auth', auth); // Protect routes app.get('/protected', auth.middleware(), (ctx) => { return { user: ctx.state.user }; }); app.listen(); ``` ## Supported Providers [Section titled “Supported Providers”](#supported-providers) ### GitHub [Section titled “GitHub”](#github) ```typescript const auth = new AuthPlugin({ jwtSecret: 'your-secret', github: { clientId: process.env.GITHUB_CLIENT_ID!, clientSecret: process.env.GITHUB_CLIENT_SECRET!, redirectUri: 'http://localhost:3000/auth/github/callback' } }); ``` ### Google [Section titled “Google”](#google) ```typescript google: { clientId: process.env.GOOGLE_CLIENT_ID!, clientSecret: process.env.GOOGLE_CLIENT_SECRET!, redirectUri: 'http://localhost:3000/auth/google/callback' } ``` ### Microsoft [Section titled “Microsoft”](#microsoft) ```typescript microsoft: { clientId: process.env.MICROSOFT_CLIENT_ID!, clientSecret: process.env.MICROSOFT_CLIENT_SECRET!, redirectUri: 'http://localhost:3000/auth/microsoft/callback', tenantId: 'common' // or your tenant ID } ``` ### Apple [Section titled “Apple”](#apple) ```typescript apple: { clientId: process.env.APPLE_CLIENT_ID!, clientSecret: process.env.APPLE_CLIENT_SECRET!, redirectUri: 'http://localhost:3000/auth/apple/callback', teamId: process.env.APPLE_TEAM_ID!, keyId: process.env.APPLE_KEY_ID! } ``` ### Auth0 [Section titled “Auth0”](#auth0) ```typescript auth0: { clientId: process.env.AUTH0_CLIENT_ID!, clientSecret: process.env.AUTH0_CLIENT_SECRET!, redirectUri: 'http://localhost:3000/auth/auth0/callback', domain: 'your-tenant.auth0.com' } ``` ### Okta [Section titled “Okta”](#okta) ```typescript okta: { clientId: process.env.OKTA_CLIENT_ID!, clientSecret: process.env.OKTA_CLIENT_SECRET!, redirectUri: 'http://localhost:3000/auth/okta/callback', domain: 'your-domain.okta.com' } ``` ### Custom OAuth2 [Section titled “Custom OAuth2”](#custom-oauth2) ```typescript oauth2: { clientId: 'your-client-id', clientSecret: 'your-client-secret', redirectUri: 'http://localhost:3000/auth/custom/callback', authUrl: 'https://provider.com/oauth/authorize', tokenUrl: 'https://provider.com/oauth/token', userInfoUrl: 'https://provider.com/oauth/userinfo' } ``` ## Auth Routes [Section titled “Auth Routes”](#auth-routes) The plugin automatically creates these routes: * `GET /auth/{provider}` - Initiate OAuth flow * `GET /auth/{provider}/callback` - OAuth callback * `GET /auth/logout` - Logout * `GET /auth/me` - Get current user (protected) Example flow: ```plaintext 1. User visits → GET /auth/github 2. Redirected to GitHub OAuth 3. User authorizes 4. Callback → GET /auth/github/callback 5. JWT cookie set 6. Redirected to your app ``` ## Protecting Routes [Section titled “Protecting Routes”](#protecting-routes) Use the auth middleware to protect routes: ```typescript // Single route app.get('/profile', auth.middleware(), (ctx) => { return ctx.state.user; }); // Multiple routes const protectedRouter = new ShokupanRouter(); protectedRouter.use(auth.middleware()); protectedRouter.get('/profile', (ctx) => ({ user: ctx.state.user })); protectedRouter.get('/settings', (ctx) => ({ settings: {} })); app.mount('/api', protectedRouter); ``` ## With Controllers [Section titled “With Controllers”](#with-controllers) ```typescript import { Use } from 'shokupan'; @Use(auth.middleware()) export class UserController { @Get('/profile') getProfile(@Ctx() ctx: any) { return ctx.state.user; } } ``` ## JWT Configuration [Section titled “JWT Configuration”](#jwt-configuration) Configure JWT tokens: ```typescript const auth = new AuthPlugin({ jwtSecret: process.env.JWT_SECRET!, jwtExpiration: '7d', // or: '1h', '30d', etc. cookieOptions: { httpOnly: true, // Prevent XSS secure: true, // HTTPS only sameSite: 'lax', // CSRF protection maxAge: 7 * 24 * 60 * 60 * 1000 // 7 days } }); ``` ## User Object [Section titled “User Object”](#user-object) After authentication, the user object is available at `ctx.state.user`: ```typescript app.get('/me', auth.middleware(), (ctx) => { const user = ctx.state.user; // { // id: 'github:12345', // email: 'user@example.com', // name: 'John Doe', // avatar: 'https://...', // provider: 'github' // } return user; }); ``` ## Frontend Integration [Section titled “Frontend Integration”](#frontend-integration) ### OAuth Flow [Section titled “OAuth Flow”](#oauth-flow) ```typescript // In your frontend function login(provider: string) { window.location.href = `http://localhost:3000/auth/${provider}`; } // Button ``` ### Check Auth Status [Section titled “Check Auth Status”](#check-auth-status) ```typescript async function checkAuth() { const response = await fetch('http://localhost:3000/auth/me', { credentials: 'include' // Send cookies }); if (response.ok) { const user = await response.json(); return user; } return null; } ``` ### Logout [Section titled “Logout”](#logout) ```typescript async function logout() { await fetch('http://localhost:3000/auth/logout', { credentials: 'include' }); // Redirect or update UI } ``` ## Environment Variables [Section titled “Environment Variables”](#environment-variables) Create a `.env` file: ```bash # JWT JWT_SECRET=your-super-secret-key-change-this # GitHub GITHUB_CLIENT_ID=your-github-client-id GITHUB_CLIENT_SECRET=your-github-client-secret # Google GOOGLE_CLIENT_ID=your-google-client-id GOOGLE_CLIENT_SECRET=your-google-client-secret # Microsoft MICROSOFT_CLIENT_ID=your-microsoft-client-id MICROSOFT_CLIENT_SECRET=your-microsoft-client-secret MICROSOFT_TENANT_ID=common ``` ## Security Best Practices [Section titled “Security Best Practices”](#security-best-practices) Production Security * Always use HTTPS in production (`secure: true`) * Use strong, random JWT secrets * Set appropriate cookie expiration * Validate redirect URIs * Store secrets in environment variables ```typescript const auth = new AuthPlugin({ jwtSecret: process.env.JWT_SECRET!, // Strong, random secret jwtExpiration: '1h', // Short expiration cookieOptions: { httpOnly: true, // Prevent XSS secure: process.env.NODE_ENV === 'production', // HTTPS only sameSite: 'strict', // Strong CSRF protection maxAge: 60 * 60 * 1000 // 1 hour } }); ``` ## Next Steps [Section titled “Next Steps”](#next-steps) * [Sessions](/plugins/sessions/) - Session management * [Validation](/plugins/validation/) - Validate user input * [Rate Limiting](/plugins/rate-limiting/) - Protect auth endpoints
# Compression
> Enable response compression
The Compression plugin compresses HTTP responses to reduce bandwidth and improve performance. ## Basic Usage [Section titled “Basic Usage”](#basic-usage) ```typescript import { Shokupan, Compression } from 'shokupan'; const app = new Shokupan(); app.use(Compression()); app.listen(); ``` ## Configuration [Section titled “Configuration”](#configuration) ```typescript app.use(Compression({ threshold: 1024, // Only compress responses larger than 1KB level: 6 // Compression level (1-9, default: 6) })); ``` ## Options [Section titled “Options”](#options) * **threshold**: Minimum response size to compress (in bytes, default: 1024) * **level**: Compression level from 1 (fastest) to 9 (best compression), default: 6 ## How It Works [Section titled “How It Works”](#how-it-works) The plugin automatically: * Checks if the client supports gzip encoding * Compresses responses larger than the threshold * Sets appropriate `Content-Encoding` header * Adjusts `Content-Length` header ## Best Practices [Section titled “Best Practices”](#best-practices) ```typescript // Use default settings for most cases app.use(Compression()); // For better performance, increase threshold app.use(Compression({ threshold: 2048 // 2KB })); // For better compression, increase level app.use(Compression({ level: 9 // Maximum compression })); ``` ## Next Steps [Section titled “Next Steps”](#next-steps) * [CORS](/plugins/cors/) - Configure CORS * [Security Headers](/plugins/security-headers/) - Add security headers
# CORS
> Configure Cross-Origin Resource Sharing
The CORS plugin handles Cross-Origin Resource Sharing configuration for your API. ## Basic Usage [Section titled “Basic Usage”](#basic-usage) Allow all origins (development only): ```typescript import { Shokupan, Cors } from 'shokupan'; const app = new Shokupan(); app.use(Cors()); app.listen(); ``` ## Configuration [Section titled “Configuration”](#configuration) ### Single Origin [Section titled “Single Origin”](#single-origin) ```typescript app.use(Cors({ origin: 'https://example.com', credentials: true })); ``` ### Multiple Origins [Section titled “Multiple Origins”](#multiple-origins) ```typescript app.use(Cors({ origin: ['https://example.com', 'https://app.example.com'], credentials: true })); ``` ### Dynamic Origin [Section titled “Dynamic Origin”](#dynamic-origin) Validate origins dynamically: ```typescript app.use(Cors({ origin: (ctx) => { const origin = ctx.headers.get('origin'); // Allow subdomains of example.com if (origin?.endsWith('.example.com')) { return origin; } // Allow specific origins const allowedOrigins = [ 'https://example.com', 'https://app.example.com' ]; return allowedOrigins.includes(origin) ? origin : false; }, credentials: true })); ``` ## Full Options [Section titled “Full Options”](#full-options) ```typescript app.use(Cors({ // Which origins are allowed origin: '*', // or string, string[], or function // Which HTTP methods are allowed methods: ['GET', 'POST', 'PUT', 'DELETE'], // or: methods: 'GET,POST,PUT,DELETE' // Which headers can be sent allowedHeaders: ['Content-Type', 'Authorization'], // or: allowedHeaders: 'Content-Type, Authorization' // Which headers are exposed to the client exposedHeaders: ['X-Total-Count', 'X-Page-Count'], // or: exposedHeaders: 'X-Total-Count, X-Page-Count' // Allow credentials (cookies, authorization headers) credentials: true, // How long preflight requests can be cached (in seconds) maxAge: 86400 // 24 hours })); ``` ## Common Patterns [Section titled “Common Patterns”](#common-patterns) ### API with Authentication [Section titled “API with Authentication”](#api-with-authentication) ```typescript app.use(Cors({ origin: process.env.FRONTEND_URL || 'http://localhost:3000', credentials: true, methods: ['GET', 'POST', 'PUT', 'PATCH', 'DELETE'], allowedHeaders: ['Content-Type', 'Authorization'] })); ``` ### Public API [Section titled “Public API”](#public-api) ```typescript app.use(Cors({ origin: '*', methods: ['GET'], credentials: false })); ``` ### Development vs Production [Section titled “Development vs Production”](#development-vs-production) ```typescript const isDev = process.env.NODE_ENV !== 'production'; app.use(Cors({ origin: isDev ? '*' : process.env.ALLOWED_ORIGINS?.split(','), credentials: !isDev, methods: ['GET', 'POST', 'PUT', 'DELETE'] })); ``` ## Preflight Requests [Section titled “Preflight Requests”](#preflight-requests) The CORS plugin automatically handles OPTIONS preflight requests: ```plaintext Client Server │ │ │──OPTIONS /api/users──→│ │ (preflight) │ │ │ │←──200 OK──────────────│ │ Access-Control-* │ │ │ │──POST /api/users────→│ │ (actual request) │ │ │ │←──201 Created─────────│ │ │ ``` ## Per-Route CORS [Section titled “Per-Route CORS”](#per-route-cors) Apply CORS to specific routes: ```typescript const corsPublic = Cors({ origin: '*' }); const corsPrivate = Cors({ origin: 'https://app.example.com', credentials: true }); // Public endpoint app.get('/api/public', corsPublic, (ctx) => { return { data: 'public' }; }); // Private endpoint app.get('/api/private', corsPrivate, (ctx) => { return { data: 'private' }; }); ``` ## Troubleshooting [Section titled “Troubleshooting”](#troubleshooting) ### Credentials and Wildcard [Section titled “Credentials and Wildcard”](#credentials-and-wildcard) Caution You cannot use `origin: '*'` with `credentials: true`. Specify exact origins instead. ```typescript // ❌ Invalid app.use(Cors({ origin: '*', credentials: true })); // ✅ Valid app.use(Cors({ origin: ['https://example.com'], credentials: true })); ``` ### Headers Not Exposed [Section titled “Headers Not Exposed”](#headers-not-exposed) If custom headers aren’t visible to the client, add them to `exposedHeaders`: ```typescript app.use(Cors({ origin: 'https://example.com', exposedHeaders: ['X-Custom-Header', 'X-Total-Count'] })); ``` ## Next Steps [Section titled “Next Steps”](#next-steps) * [Security Headers](/plugins/security-headers/) - Add security headers * [Authentication](/plugins/authentication/) - Secure your API * [Rate Limiting](/plugins/rate-limiting/) - Prevent abuse
# Debug Dashboard
> Visual dashboard for inspecting your Shokupan application.
The `Dashboard` provides a visual interface to inspect your running application. It allows you to: * View real-time metrics (requests/sec, errors, latency). * Visualize the middleware graph and request flow. * Inspect the component registry (controllers, routes). * View middleware execution logs if `enableMiddlewareTracking` is on. * Inspect and replay failed requests captured by `FailedRequestRecorder`.  ## Installation [Section titled “Installation”](#installation) ```typescript import { Dashboard } from 'shokupan'; // Mount the dashboard at a path of your choice app.mount('/debug', new Dashboard({ retentionMs: 7200000 // Keep logs for 2 hours })); ``` ## Configuration [Section titled “Configuration”](#configuration) | Option | Type | Description | | :------------------ | :----------------------------- | :-------------------------------------------------------------------------------------------- | | `retentionMs` | `number` | How long to keep in-memory metrics and logs (ms). | | `getRequestHeaders` | `() => Record` | Hook to provide custom headers (e.g. auth tokens) when replaying requests from the dashboard. | ## Features [Section titled “Features”](#features) ### Middleware Graph [Section titled “Middleware Graph”](#middleware-graph) Visualizes the structure of your application, showing how routers, controllers, and middleware are connected.  ### Component Registry [Section titled “Component Registry”](#component-registry) Inspect all registered routes and controllers in a flat or hierarchical view.  ### Requests View [Section titled “Requests View”](#requests-view) Analyze incoming requests, their duration, and the time spent in each middleware.  ### Failed Requests [Section titled “Failed Requests”](#failed-requests) Lists requests that resulted in errors. You can click on a failure to see details and replay it. ### Playback [Section titled “Playback”](#playback) Replaying a request sends the identical request payload to the server again, which is useful for debugging idempotent operations or testing fixes.
# Failed Request Recorder
> Capture and store details of failed requests.
The `FailedRequestRecorder` middleware captures details about requests that result in unhandled exceptions or 500 errors. These records can be used for debugging or replaying requests later. ## Usage [Section titled “Usage”](#usage) ```typescript import { FailedRequestRecorder } from 'shokupan'; app.use(FailedRequestRecorder()); ``` ## Integration with Debug Dashboard [Section titled “Integration with Debug Dashboard”](#integration-with-debug-dashboard) The captured failures are viewable in the [Debug Dashboard](/plugins/debug-dashboard). You can inspect the error, stack trace, headers, and body, and even replay the request from the dashboard. ## Configuration [Section titled “Configuration”](#configuration) | Option | Type | Default | Description | | :------------ | :------- | :--------------- | :------------------------------------------ | | `maxCapacity` | `number` | `10000` | Maximum number of failed requests to store. | | `ttl` | `number` | `86400000` (24h) | Time to live for stored failures (ms). |
# Idempotency
> Prevent duplicate operations with Idempotency middleware.
The `Idempotency` middleware ensures that multiple identical requests do not result in different outcomes. It works by caching the response of the first request associated with a specific idempotency key and returning the cached response for subsequent requests. ## Usage [Section titled “Usage”](#usage) ```typescript import { Idempotency } from 'shokupan'; app.post('/payments', Idempotency({ header: 'Idempotency-Key', ttl: 86400000 // 24 hours }), async (ctx) => { // ... process payment return { status: 'charged' }; } ); ``` ## How it works [Section titled “How it works”](#how-it-works) 1. Client sends a request with an `Idempotency-Key` header. 2. If the key has been seen before, the server returns the saved response (status, headers, body) without executing the handler again. 3. If the key is new, the handler executes, and the resulting response is saved. ## Configuration [Section titled “Configuration”](#configuration) | Option | Type | Default | Description | | :------- | :------- | :------------------ | :----------------------------------------- | | `header` | `string` | `'Idempotency-Key'` | The request header to look for the key. | | `ttl` | `number` | `86400000` (24h) | Time to live for the cached response (ms). |
# OpenAPI Validation
> Validate requests against your OpenAPI specification
Shokupan provides a powerful way to enforce your API contract by validating incoming requests directly against your generated OpenAPI specification. ## Overview [Section titled “Overview”](#overview) Instead of maintaining separate validation schemas (like Zod) that might drift from your OpenAPI spec, Shokupan can: 1. Generate the OpenAPI spec at startup. 2. Compile high-performance [Ajv](https://ajv.js.org/) validators from that spec. 3. Validate every request against the defined schema before it reaches your handler. ## Installation [Section titled “Installation”](#installation) The validation plugin is built-in, but requires `ajv` and `ajv-formats`: ```bash bun add ajv ajv-formats ``` ## Enabling the Flow [Section titled “Enabling the Flow”](#enabling-the-flow) To set up the “Spec-First” validation flow where validation schemas are prepared before the server starts listening: ```typescript import { Shokupan, enableOpenApiValidation } from 'shokupan'; const app = new Shokupan({ // Enable OpenAPI generation (required) enableOpenApiGen: true, port: 3000 }); // Enable the validation flow enableOpenApiValidation(app); // ... mount routes ... await app.listen(); ``` ### How it works [Section titled “How it works”](#how-it-works) 1. **Boot**: When you call `app.listen()`, the server starts up. 2. **Generation**: It generates the full OpenAPI spec from your code and decorators. 3. **Compilation**: The `onSpecAvailable` hook triggers, compiling Ajv validators for every path and method operation in your spec. 4. **Listening**: The server binds to the port and accepts requests. ## Usage with Controllers [Section titled “Usage with Controllers”](#usage-with-controllers) Define your routes as usual. The validator infers types from usage or respects explicit specs. ```typescript import { Controller, Get, Post, Body } from 'shokupan/decorators'; import { ShokupanContext } from 'shokupan'; @Controller('/users') class UserController { @Post('/') // Explicit spec overrides inference if needed createUser(ctx: ShokupanContext) { // Request body is validated against schema! // If invalid, 400 Bad Request is returned automatically. return ctx.json({ created: true }); } @Get('/:id') getUser(ctx: ShokupanContext) { // ctx.params.id is validated return ctx.json({ id: ctx.params.id }); } } ``` ## Validation Errors [Section titled “Validation Errors”](#validation-errors) When a request fails validation (body, query, params, or headers), Shokupan returns a `400 Bad Request` with details: ```json { "error": "Validation Error", "details": [ { "location": "body", "message": "must have required property 'email'", "params": { "missingProperty": "email" } } ] } ``` ## Comparison with Zod/Runtime Validation [Section titled “Comparison with Zod/Runtime Validation”](#comparison-with-zodruntime-validation) | Feature | OpenAPI Validation | Runtime Validation (Zod/Valibot) | | ------------------- | ----------------------- | -------------------------------- | | **Source of Truth** | OpenAPI Spec | TypeScript Code | | **Maintenance** | Single definition | separate schema vs spec | | **Performance** | High (Pre-compiled Ajv) | High | | **Flexibility** | Rigid (Spec-compliant) | Flexible (Custom rules) | Use OpenAPI Validation when you want strictly enforced API contracts. Use Runtime Validation when you need complex custom logic or conditional validation not easily expressible in OpenAPI.
# Proxy
> Forward requests to another server using the Proxy middleware.
The `Proxy` middleware allows you to forward requests to another server, acting as a reverse proxy. It supports both HTTP and WebSocket connections. ## Usage [Section titled “Usage”](#usage) ```typescript import { Proxy } from 'shokupan'; // Forward /api requests to an external API app.use('/api', Proxy({ target: 'https://api.external.com', changeOrigin: true })); ``` ## Options [Section titled “Options”](#options) | Option | Type | Required | Description | | :------------- | :------------------------- | :------- | :------------------------------------------------------- | | `target` | `string` | Yes | The target URL to forward requests to. | | `pathRewrite` | `(path: string) => string` | No | Function to rewrite the URL path before forwarding. | | `changeOrigin` | `boolean` | No | Changes the origin of the host header to the target URL. | | `ws` | `boolean` | No | Enable WebSocket proxying. | | `headers` | `Record` | No | Custom headers to add to the forwarded request. | ## Examples [Section titled “Examples”](#examples) ### Path Rewriting [Section titled “Path Rewriting”](#path-rewriting) Remove the prefix from the forwarded path: ```typescript app.use('/api/v1', Proxy({ target: 'https://api.service.com', pathRewrite: (path) => path.replace('/api/v1', '') })); // request: /api/v1/users -> target: https://api.service.com/users ``` ### WebSocket Proxy [Section titled “WebSocket Proxy”](#websocket-proxy) Forward WebSocket connections: ```typescript app.use('/socket', Proxy({ target: 'ws://ws.service.com', ws: true })); ```
# Rate Limiting
> Protect your API from abuse
The Rate Limit plugin protects your API from abuse by limiting the number of requests from a single IP address. ## Basic Usage [Section titled “Basic Usage”](#basic-usage) ```typescript import { Shokupan, RateLimit } from 'shokupan'; const app = new Shokupan(); // 100 requests per 15 minutes app.use(RateLimit({ windowMs: 15 * 60 * 1000, max: 100 })); app.listen(); ``` ## Configuration [Section titled “Configuration”](#configuration) ```typescript app.use(RateLimit({ windowMs: 15 * 60 * 1000, // Time window (15 minutes) max: 100, // Max requests per window message: 'Too many requests from this IP, please try again later', statusCode: 429, // HTTP status code keyGenerator: (ctx) => ctx.ip // How to identify clients })); ``` ## Different Limits per Route [Section titled “Different Limits per Route”](#different-limits-per-route) ```typescript const apiLimiter = RateLimit({ windowMs: 15 * 60 * 1000, max: 100 }); const authLimiter = RateLimit({ windowMs: 15 * 60 * 1000, max: 5, message: 'Too many login attempts' }); app.use('/api', apiLimiter); app.use('/auth/login', authLimiter); ``` ## Custom Key Generator [Section titled “Custom Key Generator”](#custom-key-generator) Rate limit by user ID instead of IP: ```typescript app.use(RateLimit({ windowMs: 15 * 60 * 1000, max: 100, keyGenerator: (ctx) => { // Use user ID if authenticated, otherwise IP return ctx.state.user?.id || ctx.ip; } })); ``` ## Skip Requests [Section titled “Skip Requests”](#skip-requests) Skip rate limiting for certain requests: ```typescript app.use(RateLimit({ windowMs: 15 * 60 * 1000, max: 100, skip: (ctx) => { // Skip rate limiting for admin users return ctx.state.user?.role === 'admin'; } })); ``` ## Response Headers [Section titled “Response Headers”](#response-headers) The plugin adds these headers to responses: * `X-RateLimit-Limit`: Maximum requests allowed * `X-RateLimit-Remaining`: Requests remaining * `X-RateLimit-Reset`: Time when the limit resets (Unix timestamp) ## Common Patterns [Section titled “Common Patterns”](#common-patterns) ### API Protection [Section titled “API Protection”](#api-protection) ```typescript app.use('/api', RateLimit({ windowMs: 15 * 60 * 1000, max: 100 })); ``` ### Auth Protection [Section titled “Auth Protection”](#auth-protection) ```typescript app.use('/auth/login', RateLimit({ windowMs: 15 * 60 * 1000, max: 5 })); ``` ### Registration Protection [Section titled “Registration Protection”](#registration-protection) ```typescript app.use('/auth/register', RateLimit({ windowMs: 60 * 60 * 1000, // 1 hour max: 3 })); ``` ## Next Steps [Section titled “Next Steps”](#next-steps) * [Security Headers](/plugins/security-headers/) - Add security headers * [Authentication](/plugins/authentication/) - Secure your API * [CORS](/plugins/cors/) - Configure CORS
# Scalar (OpenAPI)
> Beautiful interactive API documentation
The Scalar plugin provides beautiful, interactive OpenAPI (Swagger) documentation for your API. ## Quick Start [Section titled “Quick Start”](#quick-start) ```typescript import { Shokupan, ScalarPlugin } from 'shokupan'; const app = new Shokupan(); app.mount('/docs', new ScalarPlugin({ baseDocument: { info: { title: 'My API', version: '1.0.0', description: 'API documentation for my application' } }, config: { theme: 'purple', layout: 'modern' } })); app.listen(); // Documentation available at: http://localhost:3000/docs ```  ## Configuration [Section titled “Configuration”](#configuration) ```typescript app.mount('/docs', new ScalarPlugin({ baseDocument: { info: { title: 'My API', version: '1.0.0', description: 'Comprehensive API documentation', contact: { name: 'API Support', email: 'support@example.com', url: 'https://example.com/support' }, license: { name: 'MIT', url: 'https://opensource.org/licenses/MIT' } }, servers: [ { url: 'https://api.example.com', description: 'Production server' }, { url: 'https://staging-api.example.com', description: 'Staging server' }, { url: 'http://localhost:3000', description: 'Development server' } ] }, config: { theme: 'purple', // 'purple', 'blue', 'green', etc. layout: 'modern', // 'modern' or 'classic' showSidebar: true, hideDownloadButton: false } })); ``` ## Automatic OpenAPI Generation [Section titled “Automatic OpenAPI Generation”](#automatic-openapi-generation) Shokupan automatically generates OpenAPI specs from your routes and controllers. You can enhance them with metadata: ```typescript app.get('/users/:id', { summary: 'Get user by ID', description: 'Retrieves a single user by their unique identifier', tags: ['Users'], parameters: [{ name: 'id', in: 'path', required: true, schema: { type: 'string' }, description: 'User ID' }], responses: { 200: { description: 'User found', content: { 'application/json': { schema: { type: 'object', properties: { id: { type: 'string' }, name: { type: 'string' }, email: { type: 'string' } } } } } }, 404: { description: 'User not found' } } }, (ctx) => { return { id: ctx.params.id, name: 'Alice', email: 'alice@example.com' }; }); ``` ## Themes [Section titled “Themes”](#themes) Available themes: * `purple` (default) * `blue` * `green` * `red` * `orange` * `yellow` * `dark` * `light` ```typescript config: { theme: 'blue' } ``` ## Security [Section titled “Security”](#security) Add authentication to your docs in production: ```typescript const docsAuth = async (ctx, next) => { // Basic auth for docs const auth = ctx.headers.get('authorization'); if (!auth || !validateDocsAuth(auth)) { ctx.set('WWW-Authenticate', 'Basic realm="Documentation"'); return ctx.status(401); } return next(); }; if (process.env.NODE_ENV === 'production') { app.use('/docs', docsAuth); } app.mount('/docs', new ScalarPlugin({...})); ``` ## Next Steps [Section titled “Next Steps”](#next-steps) * [OpenAPI Generation](/advanced/openapi/) - Advanced OpenAPI features * [Validation](/plugins/validation/) - Generate schemas from validators * [Controllers](/core/controllers/) - Document controller endpoints
# Security Headers
> Add security headers to responses
The Security Headers plugin adds important security headers to protect your application from common web vulnerabilities. ## Basic Usage [Section titled “Basic Usage”](#basic-usage) ```typescript import { Shokupan, SecurityHeaders } from 'shokupan'; const app = new Shokupan(); // Default secure headers app.use(SecurityHeaders()); app.listen(); ``` This adds: * `X-Content-Type-Options: nosniff` * `X-Frame-Options: DENY` * `X-XSS-Protection: 1; mode=block` * `Strict-Transport-Security` (HSTS) * Content Security Policy (CSP) ## Custom Configuration [Section titled “Custom Configuration”](#custom-configuration) ```typescript app.use(SecurityHeaders({ contentSecurityPolicy: { directives: { defaultSrc: ["'self'"], styleSrc: ["'self'", "'unsafe-inline'"], scriptSrc: ["'self'", "https://trusted-cdn.com"], imgSrc: ["'self'", "data:", "https:"], connectSrc: ["'self'", "https://api.example.com"], fontSrc: ["'self'", "https://fonts.gstatic.com"], objectSrc: ["'none'"], mediaSrc: ["'self'"], frameSrc: ["'none'"] } }, hsts: { maxAge: 31536000, // 1 year includeSubDomains: true, preload: true }, frameguard: { action: 'deny' // or 'sameorigin' } })); ``` ## Content Security Policy (CSP) [Section titled “Content Security Policy (CSP)”](#content-security-policy-csp) Prevent XSS and injection attacks: ```typescript app.use(SecurityHeaders({ contentSecurityPolicy: { directives: { defaultSrc: ["'self'"], scriptSrc: ["'self'", "'unsafe-inline'", "https://cdn.example.com"], styleSrc: ["'self'", "'unsafe-inline'"], imgSrc: ["'self'", "data:", "https:"], fontSrc: ["'self'", "https://fonts.gstatic.com"], connectSrc: ["'self'", "https://api.example.com"], frameSrc: ["'none'"], objectSrc: ["'none'"] } } })); ``` ## HSTS (HTTP Strict Transport Security) [Section titled “HSTS (HTTP Strict Transport Security)”](#hsts-http-strict-transport-security) Force HTTPS connections: ```typescript app.use(SecurityHeaders({ hsts: { maxAge: 31536000, // 1 year in seconds includeSubDomains: true, // Apply to all subdomains preload: true // Submit to HSTS preload list } })); ``` ## Frame Options [Section titled “Frame Options”](#frame-options) Prevent clickjacking: ```typescript app.use(SecurityHeaders({ frameguard: { action: 'deny' // Don't allow in iframes at all // or action: 'sameorigin' // Allow only same origin } })); ``` ## Disable Specific Headers [Section titled “Disable Specific Headers”](#disable-specific-headers) ```typescript app.use(SecurityHeaders({ contentSecurityPolicy: false, // Disable CSP hsts: false // Disable HSTS })); ``` ## Development vs Production [Section titled “Development vs Production”](#development-vs-production) ```typescript const isDev = process.env.NODE_ENV !== 'production'; app.use(SecurityHeaders({ hsts: isDev ? false : { maxAge: 31536000, includeSubDomains: true, preload: true }, contentSecurityPolicy: { directives: { defaultSrc: ["'self'"], scriptSrc: isDev ? ["'self'", "'unsafe-inline'", "'unsafe-eval'"] : ["'self'"] } } })); ``` ## All Headers Explained [Section titled “All Headers Explained”](#all-headers-explained) * **Content-Security-Policy**: Prevents XSS attacks * **X-Content-Type-Options**: Prevents MIME type sniffing * **X-Frame-Options**: Prevents clickjacking * **X-XSS-Protection**: Browser XSS protection * **Strict-Transport-Security**: Forces HTTPS * **Referrer-Policy**: Controls referrer information ## Next Steps [Section titled “Next Steps”](#next-steps) * [CORS](/plugins/cors/) - Configure CORS * [Rate Limiting](/plugins/rate-limiting/) - Prevent abuse * [Authentication](/plugins/authentication/) - Secure your API
# Sessions
> Session management with connect-style store support
Shokupan provides session management compatible with connect/express-session stores. ## Basic Usage [Section titled “Basic Usage”](#basic-usage) ```typescript import { Shokupan, Session } from 'shokupan'; const app = new Shokupan(); app.use(Session({ secret: 'your-secret-key' })); app.get('/login', (ctx) => { ctx.session.user = { id: '123', name: 'Alice' }; return { message: 'Logged in' }; }); app.get('/profile', (ctx) => { if (!ctx.session.user) { return ctx.json({ error: 'Not authenticated' }, 401); } return ctx.session.user; }); app.get('/logout', (ctx) => { ctx.session.destroy(); return { message: 'Logged out' }; }); app.listen(); ``` ## Configuration [Section titled “Configuration”](#configuration) ```typescript app.use(Session({ secret: 'your-secret-key', // Required name: 'sessionId', // Cookie name (default: 'connect.sid') resave: false, // Don't save unchanged sessions saveUninitialized: false, // Don't create sessions until needed cookie: { httpOnly: true, secure: true, // HTTPS only maxAge: 24 * 60 * 60 * 1000, // 24 hours sameSite: 'lax' } })); ``` ## Session Stores [Section titled “Session Stores”](#session-stores) ### Memory Store (Development) [Section titled “Memory Store (Development)”](#memory-store-development) The default memory store is for development only: ```typescript app.use(Session({ secret: 'dev-secret' // Uses memory store by default })); ``` Production Warning Memory store doesn’t scale and loses data on restart. Use a persistent store in production. ### Redis Store [Section titled “Redis Store”](#redis-store) ```bash bun add connect-redis redis ``` ```typescript import { Session } from 'shokupan'; import RedisStore from 'connect-redis'; import { createClient } from 'redis'; const redisClient = createClient(); await redisClient.connect(); app.use(Session({ secret: process.env.SESSION_SECRET!, store: new RedisStore({ client: redisClient }), cookie: { maxAge: 24 * 60 * 60 * 1000 } })); ``` ### MongoDB Store [Section titled “MongoDB Store”](#mongodb-store) ```bash bun add connect-mongo ``` ```typescript import MongoStore from 'connect-mongo'; app.use(Session({ secret: process.env.SESSION_SECRET!, store: MongoStore.create({ mongoUrl: process.env.MONGODB_URL! }) })); ``` ### SQLite Store [Section titled “SQLite Store”](#sqlite-store) ```bash bun add connect-sqlite3 ``` ```typescript import SQLiteStore from 'connect-sqlite3'; const SQLiteSession = SQLiteStore(Session); app.use(Session({ secret: process.env.SESSION_SECRET!, store: new SQLiteSession({ db: 'sessions.db', dir: './data' }) })); ``` ## Session Methods [Section titled “Session Methods”](#session-methods) ### Set Data [Section titled “Set Data”](#set-data) ```typescript app.post('/cart/add', async (ctx) => { const { productId } = await ctx.body(); if (!ctx.session.cart) { ctx.session.cart = []; } ctx.session.cart.push(productId); return { cart: ctx.session.cart }; }); ``` ### Get Data [Section titled “Get Data”](#get-data) ```typescript app.get('/cart', (ctx) => { return { cart: ctx.session.cart || [] }; }); ``` ### Delete Data [Section titled “Delete Data”](#delete-data) ```typescript app.post('/cart/clear', (ctx) => { delete ctx.session.cart; return { message: 'Cart cleared' }; }); ``` ### Destroy Session [Section titled “Destroy Session”](#destroy-session) ```typescript app.post('/logout', (ctx) => { ctx.session.destroy(); return { message: 'Logged out' }; }); ``` ### Regenerate Session [Section titled “Regenerate Session”](#regenerate-session) ```typescript app.post('/login', async (ctx) => { const { username, password } = await ctx.body(); // Validate credentials const user = await validateUser(username, password); if (user) { // Regenerate session ID (security best practice) await ctx.session.regenerate(); ctx.session.user = user; return { message: 'Logged in' }; } return ctx.json({ error: 'Invalid credentials' }, 401); }); ``` ## Common Patterns [Section titled “Common Patterns”](#common-patterns) ### Authentication [Section titled “Authentication”](#authentication) ```typescript // Login app.post('/login', async (ctx) => { const { email, password } = await ctx.body(); const user = await authenticateUser(email, password); if (!user) { return ctx.json({ error: 'Invalid credentials' }, 401); } ctx.session.userId = user.id; ctx.session.email = user.email; return { user }; }); // Protected route const requireAuth = async (ctx, next) => { if (!ctx.session.userId) { return ctx.json({ error: 'Unauthorized' }, 401); } ctx.state.user = await getUserById(ctx.session.userId); return next(); }; app.get('/profile', requireAuth, (ctx) => { return ctx.state.user; }); // Logout app.post('/logout', (ctx) => { ctx.session.destroy(); return { message: 'Logged out' }; }); ``` ### Shopping Cart [Section titled “Shopping Cart”](#shopping-cart) ```typescript app.get('/cart', (ctx) => { return { items: ctx.session.cart || [] }; }); app.post('/cart', async (ctx) => { const { productId, quantity } = await ctx.body(); if (!ctx.session.cart) { ctx.session.cart = []; } ctx.session.cart.push({ productId, quantity }); return { cart: ctx.session.cart }; }); ``` ### Flash Messages [Section titled “Flash Messages”](#flash-messages) ```typescript app.post('/submit', async (ctx) => { // Process form ctx.session.flash = { type: 'success', message: 'Form submitted successfully' }; return ctx.redirect('/dashboard'); }); app.get('/dashboard', (ctx) => { const flash = ctx.session.flash; delete ctx.session.flash; // Remove after reading return { flash }; }); ``` ## Security Best Practices [Section titled “Security Best Practices”](#security-best-practices) ```typescript app.use(Session({ secret: process.env.SESSION_SECRET!, // Strong, random secret resave: false, saveUninitialized: false, cookie: { httpOnly: true, // Prevent XSS secure: process.env.NODE_ENV === 'production', // HTTPS only sameSite: 'strict', // CSRF protection maxAge: 60 * 60 * 1000 // 1 hour } })); ``` ## TypeScript Types [Section titled “TypeScript Types”](#typescript-types) Type your session data: ```typescript import { ShokupanContext } from 'shokupan'; interface SessionData { userId?: string; email?: string; cart?: Array<{ productId: string; quantity: number }>; } declare module 'shokupan' { interface ShokupanContext { session: SessionData & { destroy: () => void; regenerate: () => Promise; }; } } // Now you have type safety app.get('/profile', (ctx) => { const userId = ctx.session.userId; // Typed as string | undefined }); ``` ## Next Steps [Section titled “Next Steps”](#next-steps) * [Authentication](/plugins/authentication/) - OAuth2 support * [Rate Limiting](/plugins/rate-limiting/) - Protect login endpoints * [Security Headers](/plugins/security-headers/) - Add security headers
# Validation
> Validate request data with Zod, TypeBox, Ajv, or Valibot
Shokupan supports multiple validation libraries, giving you the flexibility to use your preferred validator. ## Zod Validation [Section titled “Zod Validation”](#zod-validation) [Zod](https://zod.dev/) is the recommended validation library for TypeScript: ```bash bun add zod ``` ### Basic Usage [Section titled “Basic Usage”](#basic-usage) ```typescript import { validate } from 'shokupan'; import { z } from 'zod'; const userSchema = z.object({ name: z.string().min(2), email: z.string().email(), age: z.number().min(18) }); app.post('/users', validate({ body: userSchema }), async (ctx) => { const body = await ctx.body(); // Already validated! return { created: body }; } ); ``` ### Validate Different Parts [Section titled “Validate Different Parts”](#validate-different-parts) ```typescript import { z } from 'zod'; // Body validation const createUserSchema = z.object({ name: z.string().min(2), email: z.string().email() }); app.post('/users', validate({ body: createUserSchema }), async (ctx) => { /* ... */ } ); // Query validation const searchSchema = z.object({ q: z.string(), page: z.coerce.number().default(1), limit: z.coerce.number().max(100).default(10) }); app.get('/search', validate({ query: searchSchema }), (ctx) => { const q = ctx.query.get('q'); const page = ctx.query.get('page'); return { q, page }; } ); // Path parameters validation app.get('/users/:id', validate({ params: z.object({ id: z.string().uuid() }) }), (ctx) => { return { id: ctx.params.id }; } ); // Header validation app.post('/webhook', validate({ headers: z.object({ 'x-webhook-signature': z.string() }) }), async (ctx) => { // Process webhook } ); ``` ### Complex Schemas [Section titled “Complex Schemas”](#complex-schemas) ```typescript const productSchema = z.object({ name: z.string().min(1).max(100), price: z.number().positive(), category: z.enum(['electronics', 'clothing', 'food']), tags: z.array(z.string()).optional(), metadata: z.record(z.string()).optional(), inStock: z.boolean().default(true) }); app.post('/products', validate({ body: productSchema }), async (ctx) => { const product = await ctx.body(); return { created: product }; } ); ``` ## TypeBox Validation [Section titled “TypeBox Validation”](#typebox-validation) [TypeBox](https://github.com/sinclairzx81/typebox) provides JSON Schema validation: ```bash bun add @sinclair/typebox ``` ```typescript import { Type } from '@sinclair/typebox'; import { validate } from 'shokupan'; const UserSchema = Type.Object({ name: Type.String({ minLength: 2 }), email: Type.String({ format: 'email' }), age: Type.Number({ minimum: 18 }) }); app.post('/users', validate({ body: UserSchema }), async (ctx) => { const user = await ctx.body(); return { created: user }; } ); ``` ## Ajv Validation [Section titled “Ajv Validation”](#ajv-validation) [Ajv](https://ajv.js.org/) is a fast JSON Schema validator: ```bash bun add ajv ``` ```typescript import Ajv from 'ajv'; import { validate } from 'shokupan'; const ajv = new Ajv(); const userSchema = ajv.compile({ type: 'object', properties: { name: { type: 'string', minLength: 2 }, email: { type: 'string', format: 'email' }, age: { type: 'number', minimum: 18 } }, required: ['name', 'email', 'age'] }); app.post('/users', validate({ body: userSchema }), async (ctx) => { const user = await ctx.body(); return { created: user }; } ); ``` ## Valibot Validation [Section titled “Valibot Validation”](#valibot-validation) [Valibot](https://valibot.dev/) is a lightweight alternative: ```bash bun add valibot ``` ```typescript import * as v from 'valibot'; import { validate, valibot } from 'shokupan'; const UserSchema = v.object({ name: v.pipe(v.string(), v.minLength(2)), email: v.pipe(v.string(), v.email()), age: v.pipe(v.number(), v.minValue(18)) }); app.post('/users', validate({ body: valibot(UserSchema, v.parseAsync) }), async (ctx) => { const user = await ctx.body(); return { created: user }; } ); ``` ## Error Handling [Section titled “Error Handling”](#error-handling) Validation errors automatically return 400 responses: ```typescript // POST /users with invalid data // { // "name": "A", // Too short // "email": "invalid", // Not an email // "age": 15 // Too young // } // Response: 400 Bad Request // { // "error": "Validation failed", // "details": [ // { // "field": "name", // "message": "String must contain at least 2 character(s)" // }, // { // "field": "email", // "message": "Invalid email" // }, // { // "field": "age", // "message": "Number must be greater than or equal to 18" // } // ] // } ``` ## Custom Error Messages [Section titled “Custom Error Messages”](#custom-error-messages) Override default error messages: ```typescript const userSchema = z.object({ name: z.string().min(2, 'Name must be at least 2 characters'), email: z.string().email('Please provide a valid email'), age: z.number().min(18, 'You must be 18 or older') }); ``` ## With Controllers [Section titled “With Controllers”](#with-controllers) Use validation with controller decorators: ```typescript import { Post, Body, Use } from 'shokupan'; import { validate } from 'shokupan'; import { z } from 'zod'; const createUserSchema = z.object({ name: z.string().min(2), email: z.string().email() }); export class UserController { @Post('/') @Use(validate({ body: createUserSchema })) async createUser(@Body() body: any) { return { created: body }; } } ``` ## Conditional Validation [Section titled “Conditional Validation”](#conditional-validation) Validate based on conditions: ```typescript const createSchema = z.object({ name: z.string(), email: z.string().email() }); const updateSchema = z.object({ name: z.string().optional(), email: z.string().email().optional() }).refine(data => data.name || data.email, { message: 'At least one field must be provided' }); app.post('/users', validate({ body: createSchema }), createHandler); app.put('/users/:id', validate({ body: updateSchema }), updateHandler); ``` ## Transform Data [Section titled “Transform Data”](#transform-data) Use validators to transform data: ```typescript const productSchema = z.object({ name: z.string().trim().toLowerCase(), price: z.string().transform(val => parseFloat(val)), tags: z.string().transform(val => val.split(',')) }); app.post('/products', validate({ body: productSchema }), async (ctx) => { const product = await ctx.body(); // product.name is trimmed and lowercase // product.price is a number // product.tags is an array return { product }; } ); ``` ## Next Steps [Section titled “Next Steps”](#next-steps) * [Controllers](/core/controllers/) - Use validation with controllers * [Authentication](/plugins/authentication/) - Secure your API * [OpenAPI](/advanced/openapi/) - Generate API docs from schemas
# Roadmap
> Future features and development plans
## Current Features ✅ [Section titled “Current Features ✅”](#current-features) * **Built for Bun** - Native performance * **Express Ecosystem** - Middleware support * **TypeScript First** - Decorators, Generics, Type Safety * **Auto OpenAPI** - Scalar documentation * **Rich Plugin System** - CORS, Session, Validation, Rate Limiting * **Dependency Injection** - Container for dependency injection * **OpenTelemetry** - Built-in traces * **OAuth2** - Built-in OAuth2 support * **Request-Scoped Globals** - Via AsyncLocalStorage ## Future Features 🔄 [Section titled “Future Features 🔄”](#future-features) ### Runtime Compatibility [Section titled “Runtime Compatibility”](#runtime-compatibility) * Support for Deno and Node.js * Cross-runtime testing ### Framework Plugins [Section titled “Framework Plugins”](#framework-plugins) * Drop-in adapters for Express, Koa, and Elysia ### Enhanced WebSockets [Section titled “Enhanced WebSockets”](#enhanced-websockets) * Event support * HTTP simulation ### Deep Introspection [Section titled “Deep Introspection”](#deep-introspection) * Type analysis for enhanced OpenAPI generation * Automatic schema generation from TypeScript types ### Benchmarks [Section titled “Benchmarks”](#benchmarks) * Comprehensive performance comparisons * CI/CD performance tracking ### Scaling [Section titled “Scaling”](#scaling) * Automatic clustering support * Load balancing ### RPC Support [Section titled “RPC Support”](#rpc-support) * tRPC integration * gRPC support ### Binary Formats [Section titled “Binary Formats”](#binary-formats) * Protobuf support * MessagePack support ### Reliability [Section titled “Reliability”](#reliability) * Circuit breaker pattern * Retry mechanisms * Health checks ### Strict Mode [Section titled “Strict Mode”](#strict-mode) * Enforced controller patterns * Compile-time route validation ### Standardized Errors [Section titled “Standardized Errors”](#standardized-errors) * Consistent 4xx/5xx error formats * Error cataloging ## Contributing [Section titled “Contributing”](#contributing) We welcome contributions! Check out our [GitHub repository](https://github.com/knackstedt/shokupan) to get involved.
# Changelog